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 }

 

posted @ 2015-01-19 18:14  pku_smile  阅读(155)  评论(0编辑  收藏  举报