我需要找到下一个积极的更大的回文,但我不允许使用循环或递归。
例如:
getNext(1002); //return 1111
我怎么能找到它?
所以,想一想。你有一个特定的案例,你的回文是一个数字。数字很容易上班。如果你有1002,你可以取第一个n / 2数字并反转它,所以:10_01,这是较小的,所以你在第一个中添加一个:10 + 1 = 11
。这为您提供了下一个的基础。所以,你逆转这个并得到:11_11
。
这是一个简单的算法,因此代码与您同在。
编辑:
我认为很明显,但最好说。如果数字具有奇数位数,则中心数字将相同或相同加一。无论如何,我认为你有这个主意。
这是我在Fabiano算法的帮助下实现的这项任务的解决方案。我知道这是不可读的,但它的确有效)
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;
}