lively-krishnan / brus_question_warehouse

Keep learning
1 stars 1 forks source link

9. 回文数 #13

Open 18355416639 opened 2 years ago

18355416639 commented 2 years ago

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

 

示例 1:

输入:x = 121
输出:true

示例 2:

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

示例 3:

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

示例 4:

输入:x = -101
输出:false
18355416639 commented 2 years ago

解法一: 思路:先判断是否传进来值或者值是否大于0,不符合的话直接返回false 再判断是不是一位数,如果是,返回true 然后循环遍历传过来的数,插入到定义的数组中,再把数组转换成字符串与倒排下数组转成字符串进 行对比,得出结果

代码如下:

var isPalindrome = function(x) {
    if(!(x.toString()) || x < 0) {
        return false
    }
    let arr = []
    x=x.toString()
    if(x.length === 1) {
        return true
    }
    for(let i=0;i<x.length;i++) {
        arr.push(x[i])
    }
    if(arr.toString() === arr.reverse().toString()) {
        return true
    } else {
        return false
    }
};

解法二:(无算法思想) 思路:转数据类型,给字符串分割成数组,反转数组,再转换为字符串,进行判断 代码如下:

var isPalindrome = function(x) {
    return x.toString() === x.toString().split('').reverse().join('')
};

解法三:官方解法

var isPalindrome = function(x) {
  // 特殊情况:
  // 如上所述,当 x < 0 时,x 不是回文数。
  // 同样地,如果数字的最后一位是 0,为了使该数字为回文,
  // 则其第一位数字也应该是 0
  // 只有 0 满足这一属性
  if (x < 0 || (x % 10 === 0 && x !== 0)) {
      return false;
  }

  let revertedNumber = 0;
  while (x > revertedNumber) {
      revertedNumber = revertedNumber * 10 + x % 10;
      x = Math.floor(x / 10);
      console.log('revertedNumber', revertedNumber)
      console.log('x', x)
  }

  // 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
  // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
  // 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
  console.log(x === revertedNumber || x === Math.floor(revertedNumber / 10))
  return x === revertedNumber || x === Math.floor(revertedNumber / 10);
};