回文数
难度:简单
描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例:
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
进阶: 你能不将整数转为字符串来解决这个问题吗?
思路分析
字符串反转:
- 将传入的值分割为数组
- 将转换后的字符串和反转后的字符串做比较
二分对比法:
- 将原整数分成前后两部分
- 从最后一位数字开始取出直到一半
- 原数字不断/10抛弃最后一位,新数字不断乘以10 直到反转后的数大于原数 即可判断到了一半
- 奇数数字/10 == 反转数字 || 偶数数字 == 反装数字 => 是回文数
代码实现
// 字符串反转
var isPalindrome = function(x) {
let str = x.toString().split("")
return str.join() === str.reverse().join()
};
// 二分对比法
var isPalindrome = function(x){
if(x<0 || (x%10 == 0 && x!=0)){
return false;
}
var reverseNumber = 0;
while(x>reverseNumber){
reverseNumber = reverseNumber*10 + x%10;
x = parseInt(x/10);
}
return x == reverseNumber || x == parseInt(reverseNumber/10)
}
// 中心扩展法
var isPalindrome = function(x){
var middle = parseInt(x.length/2)
var left = middle-1,right = middle+1;
while(left>=0 && right<x.length){
if(x[left] != x[right]){
return false;
}
left--;
right++;
}
return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30