vlambda博客
学习文章列表

【每日算法】LeetCode 9 —— 回文数(九十八)


题目内容

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。


回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。


示例

示例 1:

输入:x = 121

输出:true


示例 2:

输入:x = -121

输出:false

解释:从左向右读, 为 -121 。从右向左读, 为 121- 。因此它不是一个回文数。


示例 3:

输入:x = 10

输出:false

解释:从右向左读, 为 01 。因此它不是一个回文数。


示例 4:

输入:x = -101

输出:false


提示

-2^31 <= x <= 2^31 - 1


题解

首先,这里直接对负数进行剪枝,如果x < 0,那么直接返回0即可。

然后在保证x为整数的情况下,进行如下两种思考:

Part1 进行两个字符串的比较

string s = to_string(x)return s == string(s.rbegin(),s.rend())

Part2 数字翻转并比较

因为题目中没有对数据类型的限制,因此为了防止int类型溢出,采用long long 来存储翻转后的数字,然后进行x == res的比较即可。

我们需要将x中从个位开始抠出来,然后每次*10即可,具体看下方代码。


代码

class Solution {public: bool isPalindrome(int x) { if(x < 0) return false; long long res = 0; int y = x; while(x){ res = res * 10 + x % 10;//x % 10 会取出x的个位数 x /= 10;//x除完之后将x的个位数去掉 }  return y == res; }};