- LeetCode NO. 9 Palindrome Number
- LeetCode从零刷起 (9. Palindrome Numb
- leetcode-9 Palindrome Number 回文
- LeetCode #9 Palindrome Number
- leetcode #9 Palindrome Number
- LeetCode 9 [Palindrome Number]
- LeetCode #9 : Palindrome Number
- [LeetCode 9] Palindrome Number (
- Leetcode PHP题解--D133 9. Palindro
- 6 - 9. Palindrome Number
思路1 字符串
要是能把Int
转化成String
,然后从头尾开始对比,就能知道这个整数是不是一个Palindrome Number了
代码1
class Solution {
public boolean isPalindrome(int x) {
String s = Integer.toString(x);
// i只需要取到总长度的一半,因为我们是从头尾同时往中间对比的
for (int i = 0; i < s.length() / 2; i++) {
int oppo = s.length() - 1 - i;
if (s.charAt(i) != s.charAt(oppo)) return false;
}
return true;
}
}
思路2 Reverse Integer
在LeetCode #7: Reverse Integer中已经有办法如果去反转一个数字了。所以其实我们沿用同样的思路。如果一个数字是Palindrome,那么它反转过后,应该还是本身。(根据题意,负数除外)
复杂度分析
Time complexity: O(n), Space: O(n)
代码2
class Solution {
public boolean isPalindrome(int x) {
if(x < 0) return false;
if (x == 0) return true;
int reversedInt = reverseInt(x);
return x == reversedInt;
}
private int reverseInt(int x) {
int sign = (x < 0) ? -1 : 1;
x = Math.abs(x);
int result = 0;
while (x > 0) {
int remainder = x % 10;
x /= 10;
if (result > (Integer.MAX_VALUE / 10) || (result == (Integer.MAX_VALUE / 10) && remainder > 7)) return 0;
if (result < (Integer.MIN_VALUE / 10) || (result == (Integer.MIN_VALUE / 10) && remainder > 8)) return 0;
result = result * 10 + remainder;
}
result *= sign;
return result;
}
}
思路2优化
上面的方法因为需要判断在反转的过程中是否发生了Overflow, 代码看起来没那么优雅。一个优化的方法是只对比一半就可以了。
例如1221
,我们只需要对比12
和21
就可以了。
代码
class Solution {
public boolean isPalindrome(int x) {
if (x == 0) return true;
if(x < 0 || x % 10 == 0) return false;
int result = 0;
// 只对比一半
while (x > result) {
int remainder = x % 10;
x /= 10;
result = result * 10 + remainder;
}
return x == result || x == result / 10;
}
}
网友评论