使用循环找到下一个回文
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));
我想找到下一个最小的回文,但我不允许使用某些内置函数。所以我创建了这个代码:
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));