[模拟|数位] leetcode 9 回文数

it2024-01-08  74

[模拟|数位] leetcode 9 回文数

1.题目

题目链接 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121 输出: true

示例 2:

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

示例 3:

输入: 10 输出: false 解释: 从右向左读,01 。因此它不是一个回文数。

2.分析

2.1.整数反转

整数反转题解 本题考察的还是如何反转一个整数的问题。也就是说,一个非负整数反转后值不变,那么它便是一个回文数。

2.2.优化

不需要等整个数完全反转,只需要比较数的后半部分反转后与前半部分是否相等即可。

2.3.偷懒解法

可以将整数视为一个字符串,比较字符串反转前后是否相等即可判断是否回文。 这里需要利用algorithm中的reverse方法。

bool isPalindrome(int x) { string a = to_string(x); string b = to_string(x); reverse(a.begin(), a.end()); return a == b; }

3.代码

class Solution { public: bool isPalindrome(int x) { //排除负数,10的倍数(防止最后x==rev/10的判定条件出错) if (x < 0 || (x % 10 == 0 && x != 0)) { return false; } int rev = 0; //计算反转后的数 while (x > rev) { rev = rev * 10 + x % 10; x /= 10; } return x == rev || x == rev / 10; } };
最新回复(0)