「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」。
题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
解题思路
一、使用JSAPI
将数字转换为字符串,切割字符串并且reverse,最后join为字符串,两两对比,查看是否符合要求,代码如下
var isPalindrome = function (x) {
if (x < 0) return false;
const str = x.toString();
const list = str.split("");
if (str === list.reverse().join("")) return true;
return false;
};
二、使用数字取余思想
这部分分析的时候有个小技巧,我们可以先分析边界情况,像回文数这道题,边界情况为下
1、 负数不是回文数
2、两位数结尾为0不是回文数
3、0 是回文数
同时我们分析一下数据要怎么来计算
这部分思路分为奇偶数,
比如 1221(偶数),我们可以从个位开始反向创建一个新的变量,变量保存的就是倒着存起来的数据,如下示例
1221 % 10 === 1
122 % 10 === 2
倒起来的两个数据连接起来 即
12 且 12 === 12 因此此部分为回文数
如果是奇数呢,例如 121,则
121 % 10 === 1
12 % 10 === 2
1 === 12 /10 向下取整,因此代码如下
var isPalindrome = function (x) {
if (x < 0 || (x % 10 === 0 && x > 0)) return false;
let revertNumber = 0;
while (x > revertNumber) {
revertNumber = revertNumber * 10 + (x % 10);
x = Math.floor(x / 10);
console.log(x);
}
if (x === revertNumber || x === Math.floor(revertNumber / 10)) return true;
return false;
};
性能分析
时间复杂度:O(logn),对于每次迭代,我们会将输入除以 10,因此时间复杂度为 O(logn)。
空间复杂度:O(1)O(1)。我们只需要常数空间存放若干变量。
其他方案
还有一种方案实现并不那么优化,但是可以扩展一下大家的思路,大概分析如下
同时截取首尾来进行对比,两两对比直到对比完成,返回对应对比结果即可
有兴趣的可以自己手撸一份哦~~~