「这是我参与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;
}