题目

给你一个整数 x ,如果 x 是一个回文整数,返回 ture ;否则,返回 false
回文数:是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

  1. 示例 1
  2. 输入:x = 121
  3. 输出:true
  4. 示例 2
  5. 输入:x = -121
  6. 输出:false
  7. 解释:从左向右读, -121 从右向左读, 121- 。因此它不是一个回文数。
  8. 示例 3
  9. 输入:x = 10
  10. 输出:false
  11. 解释:从右向左读, 01 。因此它不是一个回文数。

方法1:

  • 首先获取当前数量级n,公式 n=10⌊log10x⌋,如:x = 24, n = 10; x = 6234, n = 1000
  • 通过x / n 获取首位。
  • 通过x % 10 获取末位。
  • (x % n) / 10 去除首位和末位,(x % n去除首位,x / 10去除末位),x 位数减 2。
  • n /= 100 x 位数减 2, 故n需要除 10^2102。

以 123421 为例,运算过程如下:

x n x / n x % 10
123421 100000 1 1
2342 1000 2 2
34 10 3 4
var isPalindrome = function (x) {
    if (x < 0) return false;
    if (x < 10) return true;
    let n = 10 ** Math.floor(Math.log10(x));//**为幂运算符:左底数,右指数
    while (n > 1 && x > 0) {
        if (Math.floor(x / n) !== x % 10) return false;
        x = Math.floor((x % n) / 10);
        n /= 100;
    }
    return true;
};

方法2:

  • 负数肯定不是回文;
  • 设定一个循环,从整数第一位下标开始,第一位与最后一位对比,第二位与倒数第二位对比,回文两边的数字会全部相等,循环次数最大值为Math.floor(x.length/2), 而如果不一致,则判断非回文,即刻退出循环。

    var isPalindrome = function(x) {
      if(x<0) return false;
      x = x.toString();
      var len = x.length;
      for(i=0;i<len/2;i++){
          if(x[i]!=x[len-1-i]) return false;
      }
      return true;
    };
    

    方法3:

  • x转化成字符串;

  • 与翻转后的字符串对比,是否相同;
    var isPalindrome = function(x) {
      if(x<0) return false;
      x = x.toString();
      var reverseStr = x.split("").reverse().join("")
      if( reverseStr == x){
          return true;
      }else return false;
    };