【每日算法】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;
}
};