[leetcode]Palindrome number 迴文數
阿新 • • 發佈:2018-12-13
題目描述:
首先負數一定不是迴文數,0是迴文數,10的倍數一定不是迴文數10000
方法1 ,跟前面的求數的逆序一樣,求出逆序數,與原數比較即可,需要藉助temp:
class Solution { public: bool isPalindrome(int x) { if (x < 0) return false; int res = 0; int temp = x; while(temp != 0){ res = res * 10 + temp % 10; temp /= 10; } return res == x ? true:false; } };
方法2,逆序一半進行比較:
class Solution { public: bool isPalindrome(int x) { if(x < 0 || (x != 0 && x% 10 ==0)) return false; int res = 0; while(x > res){ res = res * 10 + x % 10; x /= 10; }/*ex.121,res=1,x=12,res=12,x=1,退出迴圈,x==res/10,或1221,x==res,也是迴文數*/ return (res /10 == x)||(res == x); } };
這個方法事先做了一定的剔除,逆序一半進行比較,當x < res 時退出迴圈,如果這時的 x 與res 相等,或者兩者只有一位的差距,即res /10 = x,那麼就是迴文數,注意 while 迴圈的判斷條件 x > res ,不能有 x > = res, 否則會出現錯誤,因為考慮 0 時顯然res = x , 會構成死迴圈。
這兩個演算法都不太好,用時180ms.