判斷整數是否為回文
Determine whether an integer is a palindrome. Do this without extra space.
大致意思:判斷一個整數是否是回文。
常規解法:將這個整數轉換成字符串,然后用兩個指針一個從字符串頭部,另一個從字符串尾部開始,同時向中間遍歷,如果每次左右兩邊字符都相等,則是回文數,否則不是回文數。
class Solution {
public:
bool isPalindrome(int x) {
stringstream stream;
string str;
stream<<x;
str=stream.str();
int n=str.length();
for(int i=0,j=n-1;i<j;++i,--j)
{
if(str[i]!=str[j])
return false;
}
return true;
}
};
其他解法:通過將整數每次做余10操作,依次得到個位、十位、百位等,然后進行累乘累加操作,將低位變成高位,將原整數通過計算反轉,如果反轉后的整數跟原整數相等,則證明是回文數,否則不是回文數。
class Solution {
public:
bool isPalindrome(int x) {
int z=0;
int n=x;
while(x>0)
{
z=10*z+x%10;
x/=10;
}
return n==z;
}
};
代碼提示:需要注意負整數肯定不是回文數。其實這個方法還存在一個隱患,就是如果原整數特別大,很可能反轉后的整數溢出,所以保險起見還是用long long類型變量來接收反轉后的整數。雖然這個代碼一次通過,可能是測試用例沒有特別大的整數,故意避開整數溢出問題降低難度。