判断一个整数是否回文整数,不用辅助数组!

来源:互联网 发布:向量组的秩和矩阵的秩 编辑:程序博客网 时间:2024/05/18 19:44

题目:

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

Some hints:
Could negative integers be palindromes? (ie, -1)
If you are thinking of converting the integer to string, note the restriction of using extra space.
You could also try reversing an integer. However, if you have solved the problem "Reverse Integer",
you know that the reversed integer might overflow. How would you handle such case?
There is a more generic way of solving this problem.

做法:

设法取到,相对位置上的两个数字,比对过程中,如果不相等则返回FALSE,直到最后剩一位或者0位数字时,返回TRUE。

代码:

class SolutionPalindromeNumber{public static boolean isPalindrome(int x) {if(x<0){return false;}else{int length = 1;while( (x/length) >= 10 ){length = length * 10;}<pre name="code" class="html">int i = 10;while( (x/length)%10 == (x%i)/(i/10)){if( length <= i ){return true;}i = i*10;length = length/10;if( length <= i ){return true;}}return false;}    }}

亮点:

1. 负数没有回文数,直接返回FALSE;
2. 下面这段代码,取到了整数x的最高位数量级。如x=300 986,则length=100 000;x=10,length=10;
int length  = 1;
while ( (x/length)  >= 10 ){
length *= 10;
}
3. 按位比对时,如何在不改变x的情况下,依次从小到大取到各位:
 (x/length) % 10
length = length/10;
依次取到最高的各个位数,(如:(300 986/100 000)%10=3,(300 986/10 000)%10 = 30%10 =0,...)
(x%i) / (i/10);
 i = i % 10;
于此同时,取到最低的各个位数。(如:(300 986 %10)/(10/10)=6/1=6,(300 986 %100)/(100/10)=86/10=8…… )
  int i = 10;
while( (x/length)%10 == (x%i)/(i/10)){i = i*10;length = length/10;if( length <= i ){return true;}}











0 0
原创粉丝点击