LeetCode刷題實戰(zhàn)9:求解回文數(shù)
算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !
今天和大家聊的問題叫做求解回文數(shù),我們先來看題面:
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
https://leetcode-cn.com/problems/palindrome-number
翻譯
示例 1:輸入: 121輸出: true示例?2:輸入: -121輸出: false解釋: 從左向右讀, 為 -121 。從右向左讀, 為 121- 。因此它不是一個回文數(shù)。示例 3:輸入: 10輸出: false解釋:?從右向左讀, 為?01 。因此它不是一個回文數(shù)。
解題分析
class?Solution?{??
public:
????bool?isPalindrome(int?x)?{
????????if?(x<0)
????????????return?false;
????????long?long?int?sum =0;
????????long?long?int?origin = x;
????????while(x)
????????{
????????????int?num = x %10;
????????????sum = sum*10?+ num;
????????????x/=10;
????????}
????????if(sum == origin)
????????????return?true;
????????else??
????????????return?false;
????}
};
class?Solution?{
public:
????bool?isPalindrome(int?x)?{
????????// 負數(shù)肯定不是,以及首尾不對稱的非0數(shù)
????????if(x < 0?|| (x % 10?== 0?&& x != 0))
????????????return?false;
????????int?rev = 0;
????????while?( x > rev){
????????????rev = rev * 10?+ x % 10; //將低位一半的數(shù)取反。
????????????x = int?(x / 10);
????????}
????????//有rev >= x, 奇數(shù)情況下需要除去10
????????return?x == rev || x == int(rev/10);
????}
};
bool?isPalindrome(int?x)?{
??if?(x < 0) return?false;
??int?div = 1;
??while?(x / div >= 10) {
????div *= 10;
??}
??while?(x != 0) {
????int?l = x / div;
????int?r = x % 10;
????if?(l != r) return?false;
????x = (x % div) / 10; //去掉兩邊的數(shù)
????div /= 100;
??}
??return?true;
}
如果喜歡本文,請順手點個贊或者轉(zhuǎn)發(fā)吧。
上期推文:
LeetCode刷題實戰(zhàn)1:在數(shù)組上遍歷出花樣
LeetCode刷題實戰(zhàn)4:兩個正序數(shù)組的中位數(shù)
LeetCode刷題實戰(zhàn)7:整數(shù)反轉(zhuǎn)
LeetCode刷題實戰(zhàn)8:字符串轉(zhuǎn)換整數(shù)
評論
圖片
表情
