回文数

难度:简单

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

示例:

示例 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

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

思路分析
字符串反转:

  1. 将传入的值分割为数组
  2. 将转换后的字符串和反转后的字符串做比较

二分对比法:

  1. 将原整数分成前后两部分
  2. 从最后一位数字开始取出直到一半
  3. 原数字不断/10抛弃最后一位,新数字不断乘以10 直到反转后的数大于原数 即可判断到了一半
  4. 奇数数字/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
最后更新时间: 10/13/2019, 8:23:20 PM