使用循环查找下一个回文

问题描述 投票:0回答:3

我想找到下一个最小的回文,但是我不允许使用某些内置功能。所以我创建此代码:

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

它只反转数字。您能帮我从我的代码中查找出什么问题吗?

感谢。

javascript function for-loop palindrome
3个回答
0
投票

检查应为i的反转,而不是num的反转。尝试以下条件。

if (String(i) === reverse(i)) { ... }

0
投票

正确的代码是:

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


0
投票

您不需要反转,您可以在单个循环中完成,也可以迭代并仅检查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));
© www.soinside.com 2019 - 2024. All rights reserved.