分析
-
本题的考点:对撞指针。
-
如果是负数,一定不是回文串。
-
否则将数字转化为字符串,之后可以使用两个指针
i, j
分别指向字符串的开始和结束位置,判断对应字符是否相同,相同的话则i++, j--
,直到i >= j
停止。这个过程中如果存在不相同的字符则返回false
,否则返回true
。这种思路会使用Java
实现。 -
其实也可以直接将原字符串翻转,然后判断是否和远字符串相同即可。这种思路会使用
C++
实现。 -
对于进阶,可以使用Leetcode 0007 整数反转将整数翻转后判断是否相同即可,这里不演示这种做法了。
代码
- C++
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
string s = to_string(x);
return s == string(s.rbegin(), s.rend());
}
};
- Java
class Solution {
public boolean isPalindrome(int x) {
// 解法1
// if (x < 0) return false;
// String s = "" + x;
// return s.equals(new StringBuilder(s).reverse().toString());
// 解法2: 对撞指针
if (x < 0) return false;
char[] s = ("" + x).toCharArray();
int i = 0, j = s.length - 1;
while (i < j) {
if (s[i] != s[j]) return false;
i++; j--;
}
return true;
}
}
时空复杂度分析
-
时间复杂度:$O(n)$,
n
为x
的长度。 -
空间复杂度:$O(n)$,
n
为x
的长度。