js判断回文数

511 阅读2分钟

「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战

问题描述

给出一个整数,如果这个整数是一个回文数,就返回 true, 否则就返回 false.
那什么是回文数呢?回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

示例:

输入:x = 12321
输出:true;

输入:x = 1234
输出:false

解题思路及过程

从上面的示例看,整数12321从左向右数到中间和从右数到左边都是一样的,这样一想不就是把它翻转过来吗?刚好,数组的方法中就有一个可以翻转整个数组的方法,只要判断翻转过来的和原来的是不是一样的就可以了。
方法中只能传数字类型才有效,其他类型全部 return false,并且数字必须大于0(正整数);还有若是传进去的是个位数,那就直接 return true。首先得把整数转成字符串再转成数组,将数组翻转一下后再转回成字符串与原来的字符串对比,则可知结果。

let a = 12321;
function change(num) {
  if(Object.prototype.toString.call(num) !== '[object Number]'||num<0) return false;
  if(num< 10) return true;
  let str = num.toString();
  return str.split('').reverse().join('') === str;
}
console.log(change(str));// true

解题方法肯定不止一种。把数字的中间作为边界点向两边数出去,距离一样,数字就是一样的。前期对数字传入的类型判断还是一样的。不过,在对数字循环判断的时候小心一不注意就循环一整个了,只需要循环一半就可以了;还有在判断的时候不能“===”来判断,因为这样的话只要有一对相等它就会return true出去了,而我们要的是所有的都符合、相等才可以。

let a = 12321;
function change(num) {
  if(Object.prototype.toString.call(num) !== '[object Number]'|| num<0) return false;
  if(num< 10) return true;
  let arr = num.toString().split('')
  let leng = arr.length/2;
  for(let i=0; i<leng; i++) {
    if(arr[i] !== arr[arr.length-1-i]) {
      return false;
    }
  }
  return true;
}