使用循环找到下一个回文

find the next palindrome using loop

我想找到下一个最小的回文,但我不允许使用某些内置函数。所以我创建了这个代码:

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(Palindrome(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

不需要逆向,O(n),如果只对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));

我在这里使用了 while 循环。你可以试试这个:

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;
  }
var i=num;
  while(i!=0) {
    if (String(i++) === reverse(num)) {
      return --i;

    }
    num=i;
  }
}

console.log(Palindrome(23));