Leetcode9回文数
转成字符串求解
转为字符串,双指针判断求解
public class Solution {
public boolean isPalindrome(int x) {
String s = String.valueOf(x);
int l = 0;
int r = s.length() - 1;
while(l < r){
if(s.charAt(l) != s.charAt(r))
return false;
l++;
r--;
}
return true;
}
public static void main(String[] args) {
int num = 121;
Solution solution = new Solution();
boolean ans = solution.isPalindrome(num);
System.out.println(ans);
}
}
不转成字符串求解(还是使用了额外空间)
使用list存储每位数,双指针求解
import java.util.ArrayList;
/**
* 还是使用了额外的空间
*/
public class Solution {
public boolean isPalindrome(int x) {
if(x < 0)
return false;
//手动算每一位存在list中
ArrayList<Integer> list = new ArrayList<Integer>();
int quotient = 0;
int remain = 0;
do{
quotient = x / 10;
remain = x % 10;
list.add(remain);
x = x / 10;
}while(quotient != 0);
//双指针判断首尾指针是否相等,不相等则返回false
int l = 0;
int r = list.size() - 1;
while(l < r){
if(list.get(l) != list.get(r))
return false;
l++;
r--;
}
return true;
}
public static void main(String[] args) {
int num = 1231;
Solution solution = new Solution();
boolean ans = solution.isPalindrome(num);
System.out.println(ans);
}
}
不转成字符串求解(使用常数空间)
public class Solution {
public boolean isPalindrome(int x) {
//特判,负数和0结尾的大于0的数显然不是回文数
if(x < 0 || (x > 0 && x % 10 == 0))
return false;
int reverNum = 0;
//把末尾的数字反转过来,x < reverNum的时候还没有反转过一半
while (x > reverNum){
int end = x % 10;
reverNum = reverNum * 10 + end;
x = x / 10;
}
System.out.println("x:" + x);
System.out.println("reverNum:" + reverNum);
//数字长度为偶数和奇数的情况
return x == reverNum || x == reverNum / 10;
}
public static void main(String[] args) {
int num = 12321;
Solution solution = new Solution();
boolean ans = solution.isPalindrome(num);
System.out.println(ans);
}
}