leetcode:9. 回文数
题目
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121
是回文,而123
不是。
进阶:你能不将整数转为字符串来解决这个问题吗?
示例:
输入:x = 121
输出:true
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
解答 & 代码
解法一:反转数字并比较和原数是否相同
class Solution {
public:
bool isPalindrome(int x) {
// 如果是负数,直接返回 false
if(x < 0)
return false;
// 求反转数 reverseNum
int num = x;
long long reverseNum = 0; // 注意要用 long long,否则可能会溢出
while(num != 0)
{
reverseNum = reverseNum * 10 + num % 10;
num = num / 10;
}
// 如果反转数和原数相同则返回 true,否则返回 false
return reverseNum == x;
}
};
复杂度分析:整数 x
- 时间复杂度
:遍历 x 的所有数位
- 空间复杂度 O(1):
执行结果:
执行结果:通过
执行用时:4 ms, 在所有 C++ 提交中击败了 94.77% 的用户
内存消耗:5.9 MB, 在所有 C++ 提交中击败了 26.09% 的用户