<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 (3):回文數(shù)

          共 1839字,需瀏覽 4分鐘

           ·

          2020-07-30 19:08

          題目:回文數(shù)

          題目來(lái)源:https://leetcode-cn.com/problems/palindrome-number/

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

          示例 1:

          輸入: 121
          輸出: true

          示例?2:

          輸入: -121
          輸出: false
          解釋: 從左向右讀, 為 -121 。從右向左讀, 為 121- 。因此它不是一個(gè)回文數(shù)。

          示例 3:

          輸入: 10
          輸出: false
          解釋: 從右向左讀, 為 01 。因此它不是一個(gè)回文數(shù)。

          進(jìn)階:

          你能不將整數(shù)轉(zhuǎn)為字符串來(lái)解決這個(gè)問(wèn)題嗎?

          解題思路

          在題目給出的示例中可以直觀的看到,負(fù)數(shù)由于負(fù)號(hào)的關(guān)系,肯定不是回文數(shù)的,那么我們第一件事情就是判斷輸入的數(shù)字不是負(fù)數(shù)。

          然后根據(jù)數(shù)字的特性,還可以知道個(gè)位數(shù)字是 0 的整數(shù),肯定也不會(huì)是回文數(shù),個(gè)位是 0 的數(shù)字如果是回文數(shù)的話,那么首位一定也要是 0 ,這種數(shù)字除了 0 以外其余的顯然都不會(huì)是一個(gè)回文數(shù)。

          這樣,我們的第一個(gè)極限值判斷就有了,所有的負(fù)數(shù)返回 false ,所有個(gè)位是 0 且不為 0 的整數(shù)也要返回 false

          接下來(lái),不知道你們會(huì)不會(huì)想到上一篇文章中的整數(shù)反轉(zhuǎn),將整個(gè)輸入的數(shù)字反轉(zhuǎn)后,得到的結(jié)果如果和輸入數(shù)字一樣,那么這個(gè)肯定是回文數(shù),不過(guò)這么搞的話,我們還需要判斷反轉(zhuǎn)后的數(shù)字是否溢出,有點(diǎn)麻煩。

          那么比較好的方案是啥,當(dāng)然是直接反轉(zhuǎn)后面一半的數(shù)字,與前面一半的數(shù)字做比較,如果一樣的話,返回 true ,不一樣的返回 false

          數(shù)字反轉(zhuǎn)的操作很簡(jiǎn)單,輸入的數(shù)字 x 直接循環(huán)的取模就好,然后我們?cè)賹?duì)輸入的數(shù)字在循環(huán)的過(guò)程中除以 10 。

          問(wèn)題是我們?nèi)绾闻袛喾崔D(zhuǎn)的位數(shù)已經(jīng)達(dá)到了一半?

          這個(gè)問(wèn)題可以這么考慮,如果是偶數(shù)回文數(shù)的情況,X 和 Y 相等的時(shí)候,反轉(zhuǎn)的位數(shù)就已經(jīng)到一半了,如果是奇數(shù)回文數(shù)的情況,那么 X < Y 的時(shí)候,反轉(zhuǎn)的位數(shù)也到一半了,然后我們對(duì)去除 Y 的最后一位,和 X 進(jìn)行比較,如果相等,那么這個(gè)數(shù)字就是奇數(shù)位的回文數(shù)。

          寫(xiě)代碼

          經(jīng)過(guò)上面的分析,代碼已經(jīng)簡(jiǎn)單到顯而易見(jiàn)了:

          public boolean isPalindrome(int x) {
          // 先做極限情況判斷
          if (x < 0 || (x % 10 == 0 && x != 0)) return false;

          int revertedNumber = 0;

          // 一直循環(huán)到 revertedNumber 大于或者等于 x
          while (x > revertedNumber) {
          revertedNumber = revertedNumber * 10 + x % 10;
          x /= 10;
          }

          return revertedNumber == x || x == revertedNumber / 10;
          }

          到這里,不知道有沒(méi)有同學(xué)會(huì)想問(wèn),題目上如果沒(méi)有加那句「不將整數(shù)轉(zhuǎn)為字符串」題干,可以怎么解答。

          在 Java 中,如果沒(méi)有這個(gè)限制,那這個(gè)代碼不要簡(jiǎn)單太多, Java 中的 StringBuilder 和 StringBuffer 都直接提供了 reverse() 方法:

          public boolean isPalindrome_1(int x) {
          // 先做極限情況判斷
          if (x < 0 || (x % 10 == 0 && x != 0)) return false;

          StringBuilder stringBuilder = new StringBuilder(String.valueOf(x));
          return stringBuilder.toString().equals(stringBuilder.reverse().toString());
          }
          ?

          小結(jié)一下吧:如果以后遇到「整數(shù)反轉(zhuǎn)」的問(wèn)題,基本思路就是循環(huán)取模,然后再乘以 10 加起來(lái),需要注意的就是 int 類(lèi)型有長(zhǎng)度限制,注意超限和極限值判斷。今天的回文數(shù)可以看做一種稍微特殊的「整數(shù)反轉(zhuǎn)」問(wèn)題。

          ?


          感謝閱讀



          瀏覽 75
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  肏屄免费视频 | 亚洲国产一级黄片 | 九哥操逼视频 | 天天爽天天狠天天干 | 99伊人在线|