難度:中等 ??????類型: 字符串
請你來實現(xiàn)一個 atoi 函數(shù)碟案,使其能將字符串轉(zhuǎn)換成整數(shù)。
首先颇蜡,該函數(shù)會根據(jù)需要丟棄無用的開頭空格字符价说,直到尋找到第一個非空格的字符為止。
當(dāng)我們尋找到的第一個非空字符為正或者負號時风秤,則將該符號與之后面盡可能多的連續(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) 男娄。
解題思路
1.去除字符串頭尾空格
2.判斷符號
3.提取出數(shù)字字符直到第一個不為數(shù)字的字符
4.字符串轉(zhuǎn)整數(shù),乘以符號
4.判斷是否超出整數(shù)范圍漾稀,并返回相應(yīng)的值
代碼實現(xiàn)
class Solution(object):
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
s = str.strip()
if not s:
return 0
sign = 1
if s[0] == '-':
sign = -1
s = s[1:]
elif s[0]=='+':
s = s[1:]
num = ''
for c in s:
if c.isdigit():
num += c
else:
break
if not num:
return 0
num = int(num)*sign
INT_MAX = 2**31
return min(max(num,-1*INT_MAX), INT_MAX-1)