Problem:
Determine whether an integer is a palindrome. Do this without extra space.
Analysis:
题目意思:palindrome是回数的意思,就是从前往后或者从后往前看都一样。
注意 问题要求O(1)空间复杂度,注意负数不是回文数。
思路1:将输入整数转换成倒序的一个整数,再比较转换前后的两个数是否相等,但是这样需要额外的空间开销
思路2:每次提取头尾两个数,判断它们是否相等,判断后去掉头尾两个数。
思路3:构造一个倒序的整数,作比看是否相等即可。
Answer:
// 思路2
public class Solution {
public boolean isPalindrome(int x) {
if(x<0) return false;
int len=0;
int temp=x;
int large=1;
//求整数最大位为1,其余为0的整数,如234,求100
while(temp>=10){
large = large*10;
temp = temp/10;
}
while(x>0){
if(x/large!=x%10) return false;
else{
x = x % large;
x = x / 10;
large = large /100;
}
}
return true;
}
}
//思路3
public booPlean isPalindrome(int x) {
if( x < 0)
return false;
int b = 0;
int temp =x;
//构造到序数b
while(temp != 0){
b = temp % 10 + b * 10;
temp /= 10;
}
return b == x;
经验:
在做数学运算题,要求空间有限时可以考虑造数或者用数字存储某些东西。