01 回文数
Leetcode 09 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。比如20200202就是一个回文数。
判断回文数有三种解法:
1 一般解法
将整数转为字符串,然后将字符串分割为数组,通过循环数组的一半长度进行判
断对应的元素是否相等。
(代码略)
2 除法操作
通过取整和取余操作获得整数中对应的数字进行比较。
举个例子:20200202 这个数字。
通过计算 20200202 / 1000000, 得首位2
通过计算 20200202 % 10000000, 可得末位 2
将首位和末位进行比较,再将第2位0和倒数第2位0取出来继续比较。
代码:
class Solution {
public:
bool isPalindrome(int x) {
//边界判断
if (x < 0) return false;
int div = 1;
//
while (x / div >= 10) div *= 10;
while (x > 0) {
int left = x / div;
int right = x % 10;
if (left != right) return false;
x = (x % div) / 10;
div /= 100;
}
return true;
}
};
3 对折解法
取出后半段数字进行翻转,看与前半段数字是否相同。
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) return false;
int revertedNumber = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}