/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
var isNegativeNumber = false;
if (x < 0) {
isNegativeNumber = true;
}
var xStr = x.toString();
var reverseXArr = [];
for (var i = xStr.length - 1; i >= 0; i--) {
reverseXArr.push(xStr[i]);
}
var result = parseInt(reverseXArr.join(""), 10);
if (isNegativeNumber) {
result = 0 - result;
}
if (result < -Math.pow(2, 31) || result > Math.pow(2, 31) - 1) {
result = 0;
}
return result;
};
然后判断 A 的前面和后面距离与 A 距离相同的字符是否一样,如果一样,继续查找,直到不一样为止,就找到了一个回文字符串;
遍历字符串,找到所有回文字符串,取出最长的一个。
解答:
var findPalindrome = function (s, i) {
var j = 1;
while (i + j < s.length && s[i] === s[i + j]) {
j++;
}
var n = 0;
while (
i - n >= 0 &&
i + (j - 1) + n < s.length &&
s[i - n] === s[i + (j - 1) + n]
) {
n = n + 1;
}
return s.substring(i - (n - 1), i + (j - 1) + n);
};
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function (s) {
var result = "";
for (var i = 0; i < s.length; i++) {
var resulti = findPalindrome(s, i) || "";
if (resulti.length > result.length) {
result = resulti;
}
}
return result;
};
要求的结果是两个索引组成的 List:[aIndex, bIndex],这两个索引对应的值记为 a, b。
遍历列表,假设列表中第1项的值 a 是结果 List 中的一个索引的值,那么用 target 减去 a 后得到的结果 b 就是就是要找的另一个索引的值,列表除掉 a 后的子列表里面,如果 b 存在,问题已解——答案是 a 的索引和 b 的索引组成的列表 [aIndex, bIndex]。
如果不存在,将列表的第二项赋值给 a,继续寻找 b,直到找到为止。
解答
classSolution:
deftwoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
i = 0
for num in nums:
nextNum = target - num
j = i + 1
if nextNum in nums[j:]:
return [i, nums[j:].index(nextNum) + i + 1]
i += 1