今天是leetcode上比較簡單一道--回文數(shù)
給一個int數(shù) x ,正序和倒序是一樣的則叫回文數(shù) 如 123 旨巷,12321。
根據(jù)第一印象我們可以想到用Java自帶的StringBuilder 類中 reverse()方法
public boolean isPalindrome1(int x) {
StringBuilder res = new StringBuilder();
String str = String.valueOf(x);
res.append(str);
if(res.reverse().toString().equals(str)){
//判斷轉(zhuǎn)換后的與原來的是否一致
return true;
}else {
return false;
}
}
然而著實簡單了些脓诡,而且利用StringBuilder類,又需要了額外的空間霍比,效率降低。我們需要考慮不用轉(zhuǎn)成String來實現(xiàn)它
//當(dāng)x < 0 有負(fù)號肯定不符合,同樣如何是10的倍數(shù)尾數(shù)為0 只有0符合
public boolean isPalindrome2(int x) {
if(x <0 || (x %10==0 && x !=0)){
return false;
}
int reverseX = 0;
//x位數(shù)在減少 reverseX位數(shù)在增大瘪松,x為偶數(shù)長度,reverseX 和x 長度相等
// x為奇數(shù)函數(shù)那么 會有 reverseX * 10 + 0;
while (x > reverseX){
//整數(shù)里 x% 10得到尾數(shù)
//這樣 得到反轉(zhuǎn)的數(shù)字 reverseX
// x/= 10 代表x去掉末尾的數(shù)字咸作,類似于彈棧
reverseX = reverseX * 10 + x %10;
x = x /10;
}
return reverseX == x || x == reverseX /10;
}
可以用整數(shù)的% 和/ 逐個談出數(shù)字 然后比較