8.文字列変換整数(ATOI)
トピックリンク:https://leetcode-cn.com/problems/string-to-integer-atoi/
難易度:中
タイトル説明
あなたが機能を実装するために税引後営業利益、それは文字列を整数に変換することができます。
まず、空白文字で始まります関数は、これまでの最初の非空白文字を見つけるまで、必要であれば無用捨てます。
私たちは、整数の印として、後に連続した数字を上にして、可能な限り、最初の非空白文字が正または負の数であるシンボルのコンビネーションを見つけた場合、最初の非空白文字がある場合連続した数字が整数を形成するために結合された直後の図。
また、余分な文字を存在する可能性がある、有効な整数部分の後の文字列に加えて、これらの文字は無視することができ、彼らは機能に影響はありません。
注:最初の非空白文字の文字列が有効な整数文字列が空でない場合、または空白のみの文字列が含まれている場合、あなたは変換の機能である必要はありません。
いずれにしても、機能が効果的に変換できない場合は、0が返されます。
説明:
我々は、環境のサイズは、32ビット符号付き整数を格納することができると仮定し、その後の値範囲[-2 31は、 2 31れている - 1] 値がこの範囲を超える場合、INT_MAX(2返す31であるか、INT_MIN(-2 - 。1)31れます)。
例
例1:
入力: "42"
出力: 42
例2:
入力:「-42」
出力: -42の
説明:最初の非空白文字が「 - 」、それは負の符号です。
我々は、すべてのデジタル連続で負の数と、後できるだけ合わせ、最終的には-42を取得します。
例3:
入力:「と4193個の言葉」
出力: 4193
説明:次の文字が数値ではないので、デジタルOFF「3」に変換。
例4:
入力:「987個の言葉と」
出力: 0
説明:最初の非空白文字が「W」であるが、それは正の数または負の数ではありません。
したがって、変換を効果的に行うことができません。
実施例5:
入力:「-91283472332」
出力: -2147483648
説明:番号「-91283472332」32ビット符号付き整数の範囲を超えます。
だから、INT_MIN(-231)を返します。
コードの実装
class Solution:
def myAtoi(self, str: str) -> int:
# str = str.replace(' ','')
flag = 1 # 1表示正数
head_num = 1
num = 0
for char in str:
if char == ' ':
if head_num == 1:
continue
break
elif char <= '9' and char >= '0' or char == '-' or char == '+':
if char == '-' or char == '+':
if head_num == 0:
break
flag = -1 if char == '-' else 1
head_num = 0
else:
num = num*10 + int(char)
head_num = 0
else:
break
if flag*num > 2**31-1:
return flag*2**31-1
elif flag*num < -2**31:
return flag*2**31
return flag*num