题目:
/**
* 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
* 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
* 进阶:你能不将整数转为字符串来解决这个问题吗?
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode.cn/problems/palindrome-number
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
难度:
简单
思路分析:
将整数x转成字符串x,再根据长度是否能够整除2来分别求出前半段和后半段字符串,最后通过比较前后两段的值来得出是否是回文整数
代码:
执行用时:32 ms, 在所有 Java 提交中击败了5.06%的用户
内存消耗:42 MB, 在所有 Java 提交中击败了5.08%的用户
boolean isPalindrome(int x) {
String value = String.valueOf(x);
Integer length = value.length();
String start;
String end;
if(length % 2 == 1){
int index = (length / 2);
start = value.substring(0,index);
end = value.substring(index + 1,length);
}else{
int index = length / 2 ;
start = value.substring(0,index);
end = value.substring(index,length);
}
System.out.println("start:"+start+"\n end:"+end);
for(int i = 0;i < start.length();i++){
if(start.charAt(i) != end.charAt(start.length() - i - 1)){
return false;
}
}
return true;
}
优化后的代码:
执行用时:7 ms, 在所有 Java 提交中击败了23.63%的用户
内存消耗:41 MB, 在所有 Java 提交中击败了26.85%的用户
static boolean isPalindrome(int x) {
String value = String.valueOf(x);
Integer length = value.length();
int index = (length / 2);
String start = value.substring(0,index);
String end;
if(length % 2 == 1){
end = value.substring(index + 1,length);
}else{
end = value.substring(index,length);
}
for(int i = 0;i < start.length();i++){
if(start.charAt(i) != end.charAt(start.length() - i - 1)){
return false;
}
}
return true;
}
不将整数转字符串的实现:
执行用时:8 ms, 在所有 Java 提交中击败了13.40%的用户
内存消耗:41.1 MB, 在所有 Java 提交中击败了17.32%的用户
public boolean isPalindrome(int x) {
if(x < 0 || x % 10 == 0 && x != 0){
return false;
}
if(x>0 && x<10){
return true;
}
List<Integer> list = new ArrayList<>();
list = getList(list,x);
for(int i = 0;i < list.size();i++){
if(!list.get(i).equals(list.get(list.size()-i-1))){
return false;
}
}
return true;
}
List<Integer> getList(List<Integer> list ,int x){
Integer y = x / 10;
Integer z = x % 10;
if(y < 10){
list.add(z);
list.add(y);
}else{
list.add(z);
getList(list,y);
}
return list;
}