LeetCode_1日に1つの質問_python_Question 8文字列変換整数

文字列を整数に変換するには、atoi関数を実装してください。

まず、この関数は、最初の非スペース文字が見つかるまで、必要に応じて不要な開始スペース文字を破棄します。次の変換規則は次のとおりです。

最初の非ブランク文字が正または負の符号である場合、この符号を可能な限り多くの連続した数字文字と組み合わせて、符号付き整数を形成します。
最初の非ブランク文字が数字の場合、それは、後続の連続する数字文字と直接結合されて整数を形成します。
文字列には、有効な整数部分の後に余分な文字が含まれる場合があるため、これらの文字は無視でき、関数に影響を与えません。
注:文字列の最初の非スペース文字が有効な整数文字でない場合、文字列が空の場合、または文字列に空白文字のみが含まれる場合、関数を変換する必要はありません。つまり、関数を効果的に変換できません。

いずれの場合も、関数が有効な変換を実行できない場合は、0を返します。

促す:

この質問の空白文字には、スペース文字 ''のみが含まれています。
私たちの環境が32ビットの符号付き整数のみを格納できると仮定すると、値の範囲は[-231、231-1]です。値がこの範囲を超える場合は、INT_MAX(231-1)またはINT_MIN(-231)を返します。
 

例1:

入力: "42"
出力:42
例2:

入力: "-42"
出力:-42
説明:最初の非ブランク文字は「-」で、これは負の符号です。
     マイナス記号と後続のすべての数値を組み合わせて、最終的に-42になるように最善を尽くします。
例3:

入力:「4193 with words」
出力:4193
説明:次の文字が数値ではないため、変換は数値「3」で終了します。
例4:

入力: "words and 987"
出力:0
説明:最初の非ブランク文字は「w」ですが、数値でも、正または負の符号でもありません。
     したがって、効果的な変換を行うことができません。
例5:

入力: "-91283472332"
出力:-2147483648
説明:数値 "-91283472332"が32ビットの符号付き整数の範囲を超えています。 
     したがって、INT_MIN(-231)が返されます。

出典:LeetCode
 

class Solution:
    def myAtoi(self, str: str) -> int:
        INT_MAX = 2 ** 31 - 1
        INT_MIN = -2 ** 31
        i = 0
        n = len(str)            # 长度
        flag = 1                # 正负
        res = 0                 # 结果
        while i < n and str[i] == ' ':
            i += 1
        if i == n or n == 0:
            return 0
        if str[i] == '-':
            flag = -flag
        if str[i] == '+' or str[i] == '-':
            i += 1
        while i < n and '0' <= str[i] <= '9':
            res = res * 10 + int(str[i]) -int('0')
            i += 1
        res = flag * res
        if res > INT_MAX:
            return INT_MAX
        return INT_MIN if res < INT_MIN else res

 

おすすめ

転載: blog.csdn.net/qq_42548880/article/details/108573175