Keshawn_lu's Blog

Leetcode 9. 回文数

字数统计: 320阅读时长: 1 min
2020/06/10 Share

题目简介:

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

示例 1:

1
2
输入: 121
输出: true

示例 2:

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

示例 3:

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

进阶:

你能不将整数转为字符串来解决这个问题吗?

思路:

由于不能将整数转换为字符串,所以尝试倒置原数,并与原数进行比较。

每次将x % 10,便得到了x的最后一位数字,然后reverse_num = reverse_num * 10 + x % 10进行累加,最后再将x / 10,便去除了当前的最后一位数字。这样子循环结束后,reverse_num便为倒置后的数,再和原数比较即可。

tips:

  • 负数不会有回文数,直接返回false
  • 由于reverse_num * 10 + x % 10可能会溢出,所以将reverse_num设为long类型。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
bool isPalindrome(int x) {

long reverse_num = 0;
if(x < 0)
return false;
int origin_num = x;

while(x > 0){

int last_num = x % 10;
reverse_num = reverse_num * 10 + last_num;
x = x / 10;
}

return reverse_num == origin_num;

}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: