<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          LeetCode刷題實戰(zhàn)9:求解回文數(shù)

          共 1458字,需瀏覽 3分鐘

           ·

          2020-08-13 22:40



          算法的重要性,我就不多說了吧,想去大廠,就必須要經(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


          翻譯


          請判斷一個整數(shù)是否是回文數(shù)。回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。


          樣例


          示例 1:
          輸入: 121輸出: true示例?2:
          輸入: -121輸出: false解釋: 從左向右讀, 為 -121 。從右向左讀, 為 121- 。因此它不是一個回文數(shù)。示例 3:
          輸入: 10輸出: false解釋:?從右向左讀, 為?01 。因此它不是一個回文數(shù)。


          解題分析


          在本題中,負數(shù)不作為回文數(shù)考慮范圍之內(nèi),但是輸入依然可能為負,此時直接返回false即可。
          首先,一種容易想到的方法是:將整個數(shù)取反后看和原來的數(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;
          ????}
          };

          另外一種方法:根據(jù)回文數(shù)的特點,我們只需要判斷左邊一半和翻轉(zhuǎn)后的右邊一半是否相等即可。代碼如下:

          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);
          ????}
          };

          最后還有另外一種解法:類似與采用兩個指針。
          在循環(huán)體中,不斷地比較第i位和倒數(shù)第i位,直到遇到最中間的1個數(shù)字(輸入為奇數(shù)個數(shù)字)或者遇到最中間的2個數(shù)字(輸入為偶數(shù)個數(shù)字)時結(jié)束。

          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)2:用鏈表模擬加法

          LeetCode刷題實戰(zhàn)3:最長不重復子串

          LeetCode刷題實戰(zhàn)4:兩個正序數(shù)組的中位數(shù)

          LeetCode刷題實戰(zhàn)5:判斷回文子串

          LeetCode刷題實戰(zhàn)6:Z字形變換

          LeetCode刷題實戰(zhàn)7:整數(shù)反轉(zhuǎn)

          LeetCode刷題實戰(zhàn)8:字符串轉(zhuǎn)換整數(shù)


          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  夜色88V精品国产 | 天堂网中文在线 | 玖玖视频免费在线观看 | 亚洲精品AA | 国产亲子乱XXXXinin |