[更新中][已更新2題]騰訊精選練習(xí)50題解題思路記錄

7.整數(shù)反轉(zhuǎn)

題目

給出一個(gè) 32 位的有符號(hào)整數(shù)肝谭,你需要將這個(gè)整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)氛悬。

示例 1:

輸入: 123
輸出: 321
示例 2:

輸入: -123
輸出: -321
示例 3:

輸入: 120
輸出: 21
注意:

假設(shè)我們的環(huán)境只能存儲(chǔ)得下 32 位的有符號(hào)整數(shù),則其數(shù)值范圍為 [?231 , 231 ? 1]。請(qǐng)根據(jù)這個(gè)假設(shè)俄占,如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。

注意點(diǎn)

  • 數(shù)字的翻轉(zhuǎn)并不難淆衷,比較容易出錯(cuò)的是怎樣才能保證翻轉(zhuǎn)后的數(shù)組不能夠溢出缸榄。

我的寫法

class Solution {
    public int reverse(int x) {
        boolean negative = false;//用一個(gè)布爾值來(lái)標(biāo)記該數(shù)值是否為負(fù)數(shù)
        if(x < 0) {
            x = Math.abs(x);
            negative = true;
        }//如果是負(fù)數(shù)變成正數(shù)并進(jìn)行標(biāo)記
        StringBuilder sb = new StringBuilder();
        while(x > 0) {
            sb.append(x % 10);
            x /= 10;
        }
        long result = 0;
        String sresult = sb.toString();
        for(int i = 0; i < sresult.length(); i++) {
            result = result * 10 + sresult.charAt(i) - '0';
        }//整數(shù)的翻轉(zhuǎn),為了不溢出祝拯,用long類型來(lái)進(jìn)行存儲(chǔ)
        if(negative) {
            result = - result;
            return result < Integer.MIN_VALUE ? 0 : (int)result;
        }else {
            return result > Integer.MAX_VALUE ? 0 : (int)result;
        }//返回前判斷是否溢出
    }
}

官方題解

思路

  • 翻轉(zhuǎn)數(shù)字的思路其實(shí)就是每次通過(guò)取余操作甚带,獲得最低位,然后再把最低位*10變成我們需要的高位
  • 邏輯如下:
//pop operation:
pop = x % 10;
x /= 10;

//push operation:
temp = rev * 10 + pop;
rev = temp;
  • 那如何避免溢出這種情況呢佳头?題目中要求如果溢出則返回0鹰贵,官方提供的思路是,每次操作時(shí)康嘉,都要檢查下一次得到的rev是否會(huì)溢出碉输。
  • 檢查的思路如下所示:
    檢查是否溢出

    為什么pop>7就會(huì)溢出呢,是因?yàn)镮NTMAX的值是2147483647
    而(INTMAX/10)10=2147483640亭珍,所以如果pop>7敷钾,則超過(guò)了INTMAX這時(shí)候就會(huì)發(fā)生溢出枝哄。
    同理,(INTMIN/10)
    10=-2147483640闰非,如果pop<-8膘格,則會(huì)發(fā)生溢出。

代碼

class Solution {
    public int reverse(int x) {
        int rev = 0;
        while(x != 0) {
            int pop = x%10;
            x/=10;
            if(rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE/10 && pop > 7)) return 0;
            if(rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE/10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}

9. 回文數(shù)

題目

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

示例 1:

輸入: 121
輸出: true
示例 2:

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

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

注意點(diǎn)

  • 判斷回文數(shù)并不難,但是考察點(diǎn)是如何提高效率眨攘,能夠用比較更少的數(shù)字來(lái)得到結(jié)果

我的寫法

class Solution {
    public boolean isPalindrome(int x) {
        String s = String.valueOf(x);
        int i = 0, j = s.length() - 1;
        while(i < j) {
            if(s.charAt(i) != s.charAt(j)) {//兩個(gè)指針?lè)謩e從頭和尾來(lái)比較主慰,看是否相等
                return false;
            }
            i++, j--;
        }
        return true;
    }
}

官方題解

思路

  • 先對(duì)輸入的數(shù)進(jìn)行判斷,如果是負(fù)數(shù)或者最后一個(gè)數(shù)字是0鲫售,則一定不是回文數(shù)共螺。其次只需要翻轉(zhuǎn)一半的數(shù)字,再比較這兩個(gè)數(shù)字是否一樣情竹,則可以判斷是否為回文數(shù)藐不。這里需要注意的是,如果數(shù)字的位數(shù)是奇數(shù)秦效,則表示著回文中間的那位被復(fù)用了雏蛮,需要再/10來(lái)進(jìn)行比較。

代碼

class Solution {
    public boolean isPalindrome(int x) {
        if(x<0 || (x%10 == 0 && x != 0)) {
            return false;
        }
        int rev = 0;
        while(x > rev) {
            rev = rev * 10 + x % 10;
            x /= 10;
        }
        return x == rev || x == rev/10;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末阱州,一起剝皮案震驚了整個(gè)濱河市挑秉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苔货,老刑警劉巖衷模,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蒲赂,居然都是意外死亡阱冶,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門滥嘴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)木蹬,“玉大人,你說(shuō)我怎么就攤上這事∧魅” “怎么了尘颓?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)晦譬。 經(jīng)常有香客問(wèn)我疤苹,道長(zhǎng),這世上最難降的妖魔是什么敛腌? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任卧土,我火速辦了婚禮,結(jié)果婚禮上像樊,老公的妹妹穿的比我還像新娘尤莺。我一直安慰自己,他們只是感情好生棍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布颤霎。 她就那樣靜靜地躺著,像睡著了一般涂滴。 火紅的嫁衣襯著肌膚如雪友酱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天柔纵,我揣著相機(jī)與錄音缔杉,去河邊找鬼。 笑死首量,一個(gè)胖子當(dāng)著我的面吹牛壮吩,可吹牛的內(nèi)容都是我干的进苍。 我是一名探鬼主播加缘,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼觉啊!你這毒婦竟也來(lái)了拣宏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤杠人,失蹤者是張志新(化名)和其女友劉穎勋乾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗡善,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辑莫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罩引。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片各吨。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖袁铐,靈堂內(nèi)的尸體忽然破棺而出揭蜒,到底是詐尸還是另有隱情横浑,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布屉更,位于F島的核電站徙融,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瑰谜。R本人自食惡果不足惜欺冀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望似舵。 院中可真熱鬧脚猾,春花似錦、人聲如沸砚哗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛛芥。三九已至提鸟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仅淑,已是汗流浹背称勋。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涯竟,地道東北人赡鲜。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像庐船,于是被迫代替她去往敵國(guó)和親银酬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容