这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
前言
回文数是一个神奇的存在,它体现了一种对称美,在大自然中到处都是对称的例子,猎豹的四肢,狮子的面部,漂亮的蝴蝶翅膀,等等,从古之前,我们的建筑也大多是对称的,像天安门,甚至整个故宫都对称建造的,下面就来看看怎么判断回文数吧。
题目描述
给你一个整数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
提示:
-231 <= x <= 231 - 1
解题思路1
- 看了题目我们可以很容易的排除一种情况,也就是输入为负数的时候,直接return false 即可
- 这题的思路是我们通过取余操作和取商操作把输入数字进行反转,然后把得到结果和输入结果进行比较即可得到结果。代码如下
var isPalindrome = function(x) {
if(x < 0)
return false;
var cur = 0;
var num = x;
while(num != 0) {
cur = cur * 10 + num % 10;
num= parseInt(num/10)
}
return cur === x;
}
LeetCode运行结果如下
解题思路2
- 我们可以换种思路来解题,我们可以把输入的数当作字符串来进行处理,首先计算出转换的来的字符串的长度/2取证,然后通过取余是否等于0来进行不同的操作
- 如果区域等于0说明字符串的个数是双数,那么right=left+1,否则right=left+2
- 然后比较x[left]===x[right]是真假,如果是假直接return false结束,否则 left--,right++,循环结束return true,代码如下
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
x=String(x)
var left =parseInt(x.length/2)-1
var right
if(x.length%2===0){
right=left+1
}
else{
right=left+2
}
while(left>=0&&right<=x.length-1){
if(x[left]===x[right]){
left--
right++
}else{
return false
}
}
return true
};
LeetCode运行结果如下:
总结
无论用那种方法都能解决问题,但是解决问题的思路不同,所消耗的时间和内存也不同,通过上面的图可以明显看出来。
欢迎大家分享更好的解法哦