Javascript 如何在不使用循环或递归的情况下找到下一个更大的正回文?

Javascript 如何在不使用循环或递归的情况下找到下一个更大的正回文?,javascript,Javascript,我需要找到下一个更大的正回文,但我不允许使用循环或递归 例如: getNext(1002); //return 1111 我还能怎么找到它呢?那么,想想看。你有一个特殊的例子,你的回文是一个数字。数字是很容易的工作。如果您有1002,您可以取前n/2个数字并将其反转,因此:10_01,这个数字较小,因此您可以在第一个数字中添加一个:10+1=11。这将为下一步提供基础。因此,将其反转,得到:11\u 11 这是一个简单的算法,因此代码与您同在 编辑: 我认为这是很明显的,但最好说出来。如果数字

我需要找到下一个更大的正回文,但我不允许使用循环或递归

例如:

getNext(1002); //return 1111

我还能怎么找到它呢?

那么,想想看。你有一个特殊的例子,你的回文是一个数字。数字是很容易的工作。如果您有1002,您可以取前n/2个数字并将其反转,因此:10_01,这个数字较小,因此您可以在第一个数字中添加一个:
10+1=11
。这将为下一步提供基础。因此,将其反转,得到:
11\u 11

这是一个简单的算法,因此代码与您同在

编辑:


我认为这是很明显的,但最好说出来。如果数字的位数为奇数,则中间数字将相同或相同加一。不管怎样,我想你明白了。

这是我对这项任务的解决方案,我是在法比亚诺算法的帮助下实现的。我知道这是不可读的,但它是有效的)

函数getNextPalindrome(编号){
让结果;
设nextNum=String(number+1);
让左边;
让中间;
让右边;
让分隔器=数学楼层(编号(下一个长度/2));
让amountOfNumbers=middle=nextNum.split(“”);
如果(数字<10){
结果=11;
}否则如果(amountOfNumbers.length%2==0){
leftSide=nextNum.slice(0,分隔符);
rightSide=leftSide.split(“”).reverse().join(“”);
结果=编号(左侧+右侧);
如果(结果
所以。。。你要向老师提出的解决方案是“我没有使用循环或递归函数,我是在互联网上问的”?您的老师可能另有想法。@usr2564301,似乎是合法的。:)我不需要代码形式的解决方案。我需要一种方法,除了我指出的那些我理解你的算法。非常感谢)@T.Nelson,如果你解决了它,请发布代码…很好的任务,顺便说一句,不是那么琐碎的家庭作业(特别是当参数是一些特定的数字时,你会看到哪些;),当然。:)
function getNextPalindrome(number) {
  let result;
  let nextNum = String(number + 1);
  let leftSide;
  let middle;
  let rightSide;
  let divider = Math.floor(Number(nextNum.length / 2));
  let amountOfNumbers = middle = nextNum.split('');

  if (number < 10) {
    result = 11;
  } else if (amountOfNumbers.length % 2 === 0) {
    leftSide = nextNum.slice(0, divider);
    rightSide = leftSide.split('').reverse().join('');
    result = Number(leftSide + rightSide);
    if (result < nextNum) {
      leftSide = String(Number(nextNum.slice(0, divider)) + 1);
      rightSide = leftSide.split('').reverse().join('');
      result = Number(leftSide + rightSide);
    }
  } else if (amountOfNumbers.length % 2 !== 0) {
    leftSide = nextNum.slice(0, divider);
    middle = Number(middle[Math.floor(middle.length / 2)]);
    rightSide = leftSide.split('').reverse().join('');
    result = Number(leftSide + middle + rightSide);
    if (result < nextNum) {
      middle = middle + 1;
      if (middle === 10) {
        middle = 0;
        leftSide = String(Number(nextNum.slice(0, divider)) + 1);
        rightSide = leftSide.split('').reverse().join('');
        result = Number(leftSide + middle + rightSide);
      } else {
        leftSide = String(Number(nextNum.slice(0, divider)));
        rightSide = leftSide.split('').reverse().join('');
        result = Number(leftSide + middle + rightSide);
      }
    }
  }

  return result;
}