《劍指 Offer (第 2 版)》第 67 題:把字符串轉(zhuǎn)換成整數(shù)

第 67 題:把字符串轉(zhuǎn)換成整數(shù)

傳送門:把字符串轉(zhuǎn)換成整數(shù)懦吮客網(wǎng) online judge 地址挖息。

請你寫一個函數(shù)StrToInt,實現(xiàn)把字符串轉(zhuǎn)換成整數(shù)這個功能兽肤。

當然套腹,不能使用atoi或者其他類似的庫函數(shù)绪抛。

樣例:

輸入:"123"

輸出:123

注意:

你的函數(shù)應(yīng)滿足下列條件:

  1. 忽略所有行首空格,找到第一個非空格字符电禀,可以是 ‘+/?+/?’ 表示是正數(shù)或者負數(shù)幢码,緊隨其后找到最長的一串連續(xù)數(shù)字,將其解析成一個整數(shù)尖飞;
  2. 整數(shù)后可能有任意非數(shù)字字符症副,請將其忽略;
  3. 從前往后遍歷時政基,如果第一段連續(xù)非空格字符串不是一個有效的整數(shù)表示贞铣,則返回0;
  4. 如果整數(shù)大于INT_MAX(2^31 ? 1)沮明,請返回INT_MAX辕坝;如果整數(shù)小于INT_MIN(?2^31) ,請返回INT_MIN荐健;

Java 代碼:

《劍指 Offer (第 2 版)》第 67 題:把字符串轉(zhuǎn)換成整數(shù)-1

同 LeetCode 第 8 題酱畅。

傳送門:8. 字符串轉(zhuǎn)換整數(shù) (atoi)

請你來實現(xiàn)一個 atoi 函數(shù)江场,使其能將字符串轉(zhuǎn)換成整數(shù)圣贸。

首先,該函數(shù)會根據(jù)需要丟棄無用的開頭空格字符扛稽,直到尋找到第一個非空格的字符為止。

當我們尋找到的第一個非空字符為正或者負號時滑负,則將該符號與之后面盡可能多的連續(xù)數(shù)字組合起來在张,作為該整數(shù)的正負號;假如第一個非空字符是數(shù)字矮慕,則直接將其與之后連續(xù)的數(shù)字字符組合起來帮匾,形成整數(shù)。

該字符串除了有效的整數(shù)部分之后也可能會存在多余的字符痴鳄,這些字符可以被忽略瘟斜,它們對于函數(shù)不應(yīng)該造成影響。

注意:假如該字符串中的第一個非空格字符不是一個有效整數(shù)字符痪寻、字符串為空或字符串僅包含空白字符時螺句,則你的函數(shù)不需要進行轉(zhuǎn)換。

在任何情況下橡类,若函數(shù)不能進行有效的轉(zhuǎn)換時蛇尚,請返回 0。

說明:

假設(shè)我們的環(huán)境只能存儲 32 位大小的有符號整數(shù)顾画,那么其數(shù)值范圍為 [?231, 231 ? 1]取劫。如果數(shù)值超過這個范圍匆笤,qing返回 INT_MAX (231 ? 1) 或 INT_MIN (?231) 。

示例 1:

輸入: "42"
輸出: 42

示例 2:

輸入: "   -42"
輸出: -42
解釋: 第一個非空白字符為 '-', 它是一個負號谱邪。
  我們盡可能將負號與后面所有連續(xù)出現(xiàn)的數(shù)字組合起來炮捧,最后得到 -42 。

示例 3:

輸入: "4193 with words"
輸出: 4193
解釋: 轉(zhuǎn)換截止于數(shù)字 '3' 惦银,因為它的下一個字符不為數(shù)字咆课。

示例 4:

輸入: "words and 987"
輸出: 0
解釋: 第一個非空字符是 'w', 但它不是數(shù)字或正、負號璧函。
  因此無法執(zhí)行有效的轉(zhuǎn)換傀蚌。

示例 5:

輸入: "-91283472332"
輸出: -2147483648
解釋: 數(shù)字 "-91283472332" 超過 32 位有符號整數(shù)范圍。 
  因此返回 INT_MIN (?231) 蘸吓。

Python 代碼:Python 代碼比較特別善炫,要注意,符號位不在第 32 位上

class Solution(object):
    def strToInt(self, str):
        """
        :type str: str
        :rtype: int
        """

        # 去掉左右空格
        s = str.strip()

        l = len(s)
        if l == 0:
            return 0

        # 遍歷指針
        index = 0
        # 符號
        sign = 1
        # 第 1 位符號位
        s_sign = s[0]

        # 最終結(jié)果
        res = 0

        INT_MIN = -1 << 31
        INT_MAX = (1 << 31) - 1

        # 符號位是正或負號的時候 index 都加 1
        if s_sign == '+':
            index += 1
        elif s_sign == '-':
            index += 1
            sign = -1

        for i in range(index, l):
            c = s[i]
            if c.isdigit():
                cint = ord(c) - ord('0')
                res = res * 10 + cint
                if res * sign > INT_MAX:
                    break
            else:
                break

        res *= sign

        if res > INT_MAX:
            return INT_MAX
        elif res < INT_MIN:
            return INT_MIN
        return res


if __name__ == '__main__':
    solution = Solution()
    str = '2147483647'
    result = solution.strToInt(str)
    print(result)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末库继,一起剝皮案震驚了整個濱河市箩艺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宪萄,老刑警劉巖艺谆,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拜英,居然都是意外死亡静汤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門居凶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虫给,“玉大人,你說我怎么就攤上這事侠碧∧ü溃” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵弄兜,是天一觀的道長药蜻。 經(jīng)常有香客問我,道長替饿,這世上最難降的妖魔是什么语泽? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮视卢,結(jié)果婚禮上湿弦,老公的妹妹穿的比我還像新娘。我一直安慰自己腾夯,他們只是感情好颊埃,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布蔬充。 她就那樣靜靜地躺著,像睡著了一般班利。 火紅的嫁衣襯著肌膚如雪饥漫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天罗标,我揣著相機與錄音庸队,去河邊找鬼。 笑死闯割,一個胖子當著我的面吹牛彻消,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宙拉,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宾尚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谢澈?” 一聲冷哼從身側(cè)響起煌贴,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锥忿,沒想到半個月后牛郑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡敬鬓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年淹朋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钉答。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡瑞你,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出希痴,到底是詐尸還是另有隱情,我是刑警寧澤春感,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布砌创,位于F島的核電站,受9級特大地震影響鲫懒,放射性物質(zhì)發(fā)生泄漏嫩实。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一窥岩、第九天 我趴在偏房一處隱蔽的房頂上張望甲献。 院中可真熱鬧,春花似錦颂翼、人聲如沸晃洒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽球及。三九已至氧骤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吃引,已是汗流浹背筹陵。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留镊尺,地道東北人朦佩。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像庐氮,于是被迫代替她去往敵國和親语稠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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