题目描述
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例
例1
输入:x = 121
输出:true
例2
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
例3
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
思路
1.根据例2可以看出负数不是回文整数,如果是负数直接返回false;
2.如果是正数,使x每次%10得到最后一位,将其放入一个数组中,再将x/10得到前面剩下的部分。(如123,%10得到最后一位3,/10得到12。)当x/10为0时,说明此时只剩一位了,如123,到最后1/10=0,此时结束循环。循环的过程中记录数字的位数。
3.得到位数后再使用一个数组,将得到的数字倒着赋给新数组,最后分别从两个数组的头尾进行比较,如果有不同的位,输出false。
4.如果中间没有返回false的情况,最后会返回true。
代码
package LeetCode;
import java.util.Scanner;
public class Parlindrome {
public static void main(String[] args) {
System.out.print("please enter x:");
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
boolean res = isPalindrome(x);
System.out.println(res);
}
public static boolean isPalindrome(int x) {
if(x<0){
return false;
}else{
int[] nums = new int[10];
int i = 0;
int count=0; //统计位数
while(x != 0){
nums[i] = x%10;
x=x/10;
i++;
count++;
}
int[] xnum = new int[count];
int j = 0;
for(i= count-1;i>=0;i--){
xnum[i] = nums[j];
j++;
}
for(i=0;i<count;i++){
if(xnum[i] != nums[i]){
return false;
}
}
}
return true;
}
}
其中第35行for循环的比较次数,后来我觉得比较一半就够了,但修改之后提交发现不如次数为count快。