我想找到下一个最小的回文,但是我不允许使用某些内置功能。所以我创建此代码:
function reverse(nums) {
var reverse = "";
for (var i = String(nums).length - 1; i >= 0; i--) {
reverse += String(nums)[i];
}
return reverse;
}
function Palindrome(num) {
if (String(num).length < 2) {
return num + 1
}
for (var i = num + 1; i < num + 3; i++) {
if (String(i) === reverse(num)) {
return i
}
}
}
console.log(Palindrome(23)) // 32
第一个函数将反转字符串,第二个将找到最接近的回文。在测试用例上,结果应该是33。
但是当我运行代码时,结果是:
console.log(回文(23))// 32
它只反转数字。您能帮我从我的代码中查找出什么问题吗?
感谢。
检查应为i
的反转,而不是num
的反转。尝试以下条件。
if (String(i) === reverse(i)) { ... }
正确的代码是:
function reverse(nums) {
var reverse = "";
for (var i = String(nums).length - 1; i >= 0; i--) {
reverse += String(nums)[i];
}
return reverse;
}
function Palindrome(num) {
if (String(num).length < 2) {
return num + 1
}
for (var i = num + 1; ; i++) {
if (String(i) === reverse(i)) {
return i
}
}
}
console.log(Palindrome(23))
您正在做num的倒数代替i
您不需要反转,您可以在单个循环中完成,也可以迭代并仅检查num长度的一半以提高性能。
在这里,我从头到尾匹配数字的位数。
因此,第一个数字应匹配最后一个数字,第二个数字应匹配倒数第二个,依此类推。我任何这样的比赛失败,编号不是回文。
而且,您只需要增加数字长度的一半(将其转换为字符串后);
function Palindrome(num) {
num = "" + num;
for(var i = 0; i < num.length/2; i++)
{
if(num[i] != num[num.length - (i+1)])
return false;
}
return true;
}
function nextPalindrome(num)
{
while(!Palindrome(++num)){}
return num;
}
console.log(nextPalindrome(22));
console.log(nextPalindrome(23));
console.log(nextPalindrome(232));
console.log(nextPalindrome(122));
console.log(nextPalindrome(1001));