题目地址:https://leetcode.com/problems/palindrome-number/description/
题目要求:
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1:
Input: 121 Output: true
Example 2:
Input: -121 Output: false Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Example 3:
Input: 10 Output: false Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Follow up:
Coud you solve it without converting the integer to a string?
算法思路:
第一种思路:把数字转化为字符串,再通过字符来做。
- 负数不可能是回文字数字,直接返回false
- 通过left和right两个指针分别从中间往两边走依次比较,如果两个字符不同返回false
- left容易确定,直接通过除2然后1即可(角标从0开始),如果是偶数right为left+1,否则则right为left+2
题目代码:
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
String strX = String.valueOf(x);
int length = strX.length();
int left = length / 2 - 1;
int right = length % 2 == 0 ? left+1 : left + 2;
while (left >= 0){
if(strX.charAt(left) != strX.charAt(right)){
return false;
}
left--;
right++;
}
return true;
}
}
11508 / 11508 test cases passed.
Status: Accepted
Runtime: 322 ms
第二种思路:直接通过数字的反转来做
- 利用一个变量暂存初始的x
- 负数直接返回false
- 反转字符串存入result,在此过程中防止超过整数最大值
- 最后判断反转后的整数是否和原始整数相等
public boolean isPalindrome(int x) {
int y = x;
if (x < 0) {
return false;
}
int result = 0;
while(x !=0){
if (result*10 + x%10>Integer.MAX_VALUE){
return false;
}
result = result*10 + x%10;
x = x/10;
}
return result == y;
}
11508 / 11508 test cases passed.
| Status: Accepted |
Runtime:
268 ms
|