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 }