1. 回文数题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
2. 示例
3. 思路
- 回文数,最高位必定等于最低位。第二高位和第二地位必定相等。依次类推。
- 负数必不为回文数。
4. 遇上的问题
- 一开始不想转成String数组,又没有考虑到回文数中隐含的特点------回文数以中间分开两边的值是相等的。
- 找不到思路最终还是转成了数组进行判断。
5. 具体实现代码
- 方法1:自己写的
class Solution {
public boolean isPalindrome(int x) {
//写了一个判断传进来的数有几位的方法
int size =size(x);
if(x<0) return false;
if(x<10) return true;
int arr[] = new int[size];
//将传进来的数,拆分传进数组中
for (int i = 0;i<size;i++){
arr[i]=x%10;
x /= 10;
}
//让数组进行前后对比
for (int i = 0;i<size/2;i++){
if (arr[i]!=arr[size-i-1])
return false;
}
return true;
}
//借鉴的是Integer底层中toString中用到的方法,
//通过一个静态数组来判断传进来的数的大小从而返回对应的位数
static int[] sizeTable={9,99,999,9999,99999,999999,9999999,99999999,999999999,Integer.MAX_VALUE};
static int size(int x){
for (int i=0 ;;i++){
if(x<=sizeTable[i]){
return i+1;
}
}
}
}
-
方法二,通过后参考他人的算法
-
借助了LinkedList的方法,但是时间上并不允许,总会超出时间限制
-
可是问题是别人提交后允许时间是8ms,我明白思路后自己写的,后来又和源码进行比对,甚至改成一模一样都是超过时间限制。
class Solution {
public boolean isPalindrome(int x) {
//小于0时固定不是回文数
if (x<0) return false;
LinkedList<Integer> list = new LinkedList<Integer>();
//将数拆分存放到list中
while(x != 0){
list.addFirst(x%10);
x = x/10;
}
//在list中进行比对,第一个和最后一个不同时返回false,
//相同时,判断剩余个数,比两个多要进行去出首尾已经对比过的数
//剩余一个时说明其他的数已经对比完毕,只是因为传进来的回文数是位数是单数,有剩余一位,直接返回true。
while(!list.isEmpty()){
if (list.getFirst() != list.getLast()){
return false;
}
if (list.size()>2){
list.removeFirst();
list.removeLast();
}
if (list.size()==1){
return true;
}
}
//在list对比过程中没有返回false,说明全部对比都成功。返回true
return true;
}
}
- 方法三:官方解法,最为致命。
public boolean isPalindrome(int x) {
//负数均不为回文数
if(x<0){
return false;
}
//个位数均为回文数
if(x<10)
return true;
//非个位数能整除0无余数的必不为回文数,因为最高位不可能为0
if (x%10==0){
return false;
}
int copyX =0;
//思维:若为回文数,从中间切开
// 假设位数为双数,必定前面值等于后面值
// 假设位数为单数,则去除中间数,比较两边值
while(true){
copyX = copyX*10 + (x % 10);
x = x/10;
if (copyX<x)
continue;
if (copyX == x)
return true;
if (copyX > x){
copyX = copyX/10;
if (copyX == x)
return true;
else
return false;
}
}
}
6. 学习收获,官方一如既往的妙啊
- 回文数的中间 分开,两边的值是相同的啊!真的是那一层窗户纸揭开就会很妙,这就是算法吗?官方解法是真的妙。
- 想去改进算法,但是撞了一头,不过也还是会继续想要改进算法,提高自己的敏锐度啊!
7 题目来源
点点滴滴,如金色玫瑰花瓣,洋洋洒洒铺落心间。------swrici