这是我的答案。但是,我无法通过“ 11”的测试用例。我找不到代码中的错误。请帮忙!谢谢!
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if (x === 0) {
return true;
}
if (x < 0 || x % 10 === 0) {
return false;
}
let rev = 0;
while (x > rev) {
pop = x % 10;
x = x / 10;
rev = (rev * 10) + pop;
}
if (x === rev || x === rev / 10) {
return true;
}
else {
return false;
}
};
查找回文本质上是您通常会使用strings而不是数字变量执行的操作,所以我建议将您的数字转换为字符串,然后从那里开始:
var isPalindrome = function(x) {
x = x + ""; // convert to string, if x be a number
var isPalindrome = true;
for (i = 0; i < x.length/2; i++) {
if (x.substring(i, i+1) != x.substring(x.length-1-i, x.length-i)) {
isPalindrome = false;
break;
}
}
return isPalindrome;
}
console.log(isPalindrome(1234321));
console.log(isPalindrome(1234329));
这里的策略只是迭代字符串的一半,并断言每个字符都与另一半匹配。请注意,在输入的字符数为奇数的情况下,我们不需要检查中间字符。
使用字符串检查回文是非常容易和直接的。话虽如此,如果您想了解如何在不将数字更改为字符串的情况下进行操作,
Math.pow(10, digit count-1)
开头的变量var isPalindrome = function(x) {
// to get the digits from start we need to get log10 of given value
let start = Math.pow(10,Math.ceil(Math.log10(x))-1)
while(x > 9){
// compare first digit with the last digit
if(Math.floor(x/start) != (x % 10)){
return false
}
// remove first digit of current x
x = x % start
// remove last digit of current x
x = Math.floor(x/10)
// reduce start by 100 as we removed 2 digits
start /= 100
}
return true
};
console.log(isPalindrome(11))
console.log(isPalindrome(1))
console.log(isPalindrome(12341))
console.log(isPalindrome(1221))
console.log(isPalindrome(12321))
注意:-我们进行(digit count - 1)
,以便捕获第一位数字