1. 程式人生 > 其它 >基於Vue的前端微服務

基於Vue的前端微服務

請你來實現一個myAtoi(string s)函式,使其能將字串轉換成一個 32 位有符號整數(類似 C/C++ 中的 atoi 函式)。

函式myAtoi(string s) 的演算法如下:

讀入字串並丟棄無用的前導空格
檢查下一個字元(假設還未到字元末尾)為正還是負號,讀取該字元(如果有)。 確定最終結果是負數還是正數。 如果兩者都不存在,則假定結果為正。
讀入下一個字元,直到到達下一個非數字字元或到達輸入的結尾。字串的其餘部分將被忽略。
將前面步驟讀入的這些數字轉換為整數(即,"123" -> 123, "0032" -> 32)。如果沒有讀入數字,則整數為 0 。必要時更改符號(從步驟 2 開始)。
如果整數數超過 32 位有符號整數範圍 [−231, 231− 1] ,需要截斷這個整數,使其保持在這個範圍內。具體來說,小於 −231 的整數應該被固定為 −231 ,大於 231− 1 的整數應該被固定為 231− 1 。
返回整數作為最終結果。
注意:

本題中的空白字元只包括空格字元 ' ' 。
除前導空格或數字後的其餘字串外,請勿忽略 任何其他字元。

示例1:

輸入:s = "42"
輸出:42
解釋:加粗的字串為已經讀入的字元,插入符號是當前讀取的字元。
第 1 步:"42"(當前沒有讀入字元,因為沒有前導空格)
^
第 2 步:"42"(當前沒有讀入字元,因為這裡不存在 '-' 或者 '+')
^
第 3 步:"42"(讀入 "42")
^
解析得到整數 42 。
由於 "42" 在範圍 [-231, 231 - 1] 內,最終結果為 42 。
示例2:

輸入:s = " -42"
輸出:-42
解釋:
第 1 步:" -42"(讀入前導空格,但忽視掉)
^
第 2 步:" -42"(讀入 '-' 字元,所以結果應該是負數)
^
第 3 步:" -42"(讀入 "42")
^
解析得到整數 -42 。
由於 "-42" 在範圍 [-231, 231 - 1] 內,最終結果為 -42 。
示例3:

輸入:s = "4193 with words"
輸出:4193
解釋:
第 1 步:"4193 with words"(當前沒有讀入字元,因為沒有前導空格)
^
第 2 步:"4193 with words"(當前沒有讀入字元,因為這裡不存在 '-' 或者 '+')
^
第 3 步:"4193 with words"(讀入 "4193";由於下一個字元不是一個數字,所以讀入停止)
^
解析得到整數 4193 。
由於 "4193" 在範圍 [-231, 231 - 1] 內,最終結果為 4193 。
示例4:

輸入:s = "words and 987"
輸出:0
解釋:
第 1 步:"words and 987"(當前沒有讀入字元,因為沒有前導空格)
^
第 2 步:"words and 987"(當前沒有讀入字元,因為這裡不存在 '-' 或者 '+')
^
第 3 步:"words and 987"(由於當前字元 'w' 不是一個數字,所以讀入停止)
^
解析得到整數 0 ,因為沒有讀入任何數字。
由於 0 在範圍 [-231, 231 - 1] 內,最終結果為 0 。
示例5:

輸入:s = "-91283472332"
輸出:-2147483648
解釋:
第 1 步:"-91283472332"(當前沒有讀入字元,因為沒有前導空格)
^
第 2 步:"-91283472332"(讀入 '-' 字元,所以結果應該是負數)
^
第 3 步:"-91283472332"(讀入 "91283472332")
^
解析得到整數 -91283472332 。
由於 -91283472332 小於範圍 [-231, 231 - 1] 的下界,最終結果被截斷為 -231 = -2147483648 。

提示:

0 <= s.length <= 200
s 由英文字母(大寫和小寫)、數字(0-9)、' '、'+'、'-' 和 '.' 組成

class Solution:
    def myAtoi(self, s: str) -> int:
        if not s: return 0

        l = len(s)
        res = ''
        for i in range(l):
            if s[i] == " ":
                continue
            elif s[i] == '-' or s[i] == '+':
                if (i + 1 < l and not s[i + 1].isdigit()): # 避免+-, +空格, +字串等
                    return 0
                res += s[i]
            elif not s[i].isdigit():
                return 0
            elif s[i].isdigit():
                res += s[i]

                if i + 1 < l and not s[i + 1].isdigit():
                    break
        
        if res in ['-', '+', '']:
            return 0
        elif (int(res) < -2**31):
            return -2**31
        elif int(res) > 2**31 -1:
            return 2**31 - 1
        return int(res)