首页 > 代码库 > leetcode------Palindrome Number

leetcode------Palindrome Number

标题:Palindrome Number
通过率:29.1%
难度:简单

Determine whether an integer is a palindrome. Do this without extra space.

  这个题没有理解是因为单词不认识,然后就是不知道什么是回文数,翻译一下,百度一下才知道什么是回文数,如果没有题目上最后一句话,那么还是好做的,把给定的数字换成字符串,然后从第零个位置比较最后一个位置,一共比较length/2次。

  题目上说不能用额外的空间那意思就是不能转换成字符串了。哪总体思路还是前后比较,首先要计算出数字的长度,用除10操作,获得length那么依然需要比较lenght/2次,这个题得通过一个例子来说明:

假如一个回文数为:1234321,长度为7,那么length/2为3,即比较第 <0,6>;<1,5>;<2,4>三个数字若相同则为回文数。

如果回文数为123321,length/2仍然为3,即比较<0,5>;<1,4>;<2,3>三组数字分别相同则为回文。

  那么要解决一个问题就是不用额外数组如何取数出来。要想到取余操作,我们以1234321这个数字为例子,

要比较的位置为<0,6>;<1,5>;<2,4>,length为7,我们发现,<0,6>就是<0,length-1-0>,<1,5>就是<1,length-1-1>

也就是<i,length-1-i>,那么对于1234321中第一次要比较的是第零个位置的1和第五个位置的1,对于第零个位置的1,1234321%1(10^6)获得,第六个位置的1,1234321%(10^0),说道这里就明白了。一个getnum函数就可以获得

下面直接看代码:

 1 public class Solution { 2     public boolean isPalindrome(int x) { 3         int count=1,num=x; 4         if(x<0) return false; 5         while(num/10!=0){ 6             num/=10; 7             count++; 8         } 9         for(int i=0;i<count/2;i++){10             int a=i;11             int b=count-1-i;12             if(getnum(x,a)!=getnum(x,b)){13                 return false;14             }15             16         }17         return true;18     }19     public int getnum(int x,int i){20         int tmp=(int)Math.pow(10,i);21         return (x/tmp)%10;22     }23 }

 

leetcode------Palindrome Number