📅  最后修改于: 2023-12-03 14:50:23.762000             🧑  作者: Mango
本题目的是给定一个数字字符串,要求在其后面添加一个数字k,使得添加后的数字字符串可以成为回文串。回文串就是正着读和倒着读都一样的字符串。如果没有解,则返回字符串 "NO"。
首先,我们需要知道一个回文串的定义,即正着读和倒着读都一样的字符串。因此,我们可以通过拼接的方式来构造回文串。在给定的数字字符串的末尾添加一个数字k,使得新的数字字符串正着读和倒着读都一样。我们可以从数字字符串的最后一个数字开始向前遍历,依次判断当前的数字和k加起来是否可以构成回文串。
以下是本题的基本思路的伪代码:
function palindrome(str) {
let i = str.length - 1;
let k = 0;
while(true) {
let num = parseInt(str[i]) + k;
if(isPalindrome(str + num)) {
return str + num;
}
else {
k++;
if(k > 9) {
return "NO";
}
}
}
}
function isPalindrome(str) {
let len = str.length;
for(let i = 0; i < Math.floor(len / 2); i++) {
if(str[i] !== str[len - 1 - i]) {
return false;
}
}
return true;
}
我们首先定义了一个函数palindrome,其中输入参数str是一个数字字符串,输出为添加k后的回文串,如果无法构造回文串,则输出 "NO"。我们先定义i为数字字符串的最后一个数字的下标,k为待添加的数字。然后我们进入while循环。在循环中,我们通过判断能否构造回文串来结束循环。我们定义num为数字字符串的最后一个数字和k相加得到的数,如果将num添加到数字字符串str的末尾后能构造回文串,则返回str + num。如果无法构造回文串,则将k加1,继续判断,直到k > 9时,我们认为已经无法构造回文串,此时返回 "NO"。
我们还定义了一个函数isPalindrome,用于判断一个字符串是否为回文串。我们通过遍历字符串的前半部分,依次判断对应的字符是否和后半部分对应的字符相等,如果有任意一个不相等,则认为该字符串不是回文串,返回false。如果整个字符串都遍历完,都没有找到不相等的地方,则认为该字符串是回文串,返回true。