這篇文章將介紹 LeetCode 題目 8. String to Integer (atoi),這是一道實現 atoi
函數的題目。此題的核心在於如何解析字串中的數字並轉換成整數,同時需要考慮各種特殊情況和邊界條件。
給定一個字串 s
,將字串轉換為一個 32 位整數(類似於 C/C++ 中的 atoi
函數)。需要處理一些特殊情況,比如:
範例:
Input: s = "42"
Output: 42
Input: s = "-042"
Output: -42
Input: s = "0-1"
Output: 0
Input: s = "words and 987"
Output: 0
Input: s = "-91283472332"
Output: -2147483648
此題的實現分為多個步驟,需要依次處理空格、正負號、數字轉換和溢出判斷。以下是詳細步驟:
+
或 -
,記錄符號(預設為正)。為了實現這個過程,可以使用字串操作來逐步處理每個字符。此方法會遍歷字串中的每一部分,並在不滿足條件時結束。
步驟
sign
。num
。實作 (Python)
def myAtoi(s):class Solution:
def myAtoi(self, s: str) -> int:
INT_MAX, INT_MIN = 2**31 - 1, -2**31
i, n = 0, len(s)
sign = 1
num = 0
# 去除開頭空格
while i < n and s[i] == ' ':
i += 1
# 處理符號
if i < n and s[i] in ('+', '-'):
sign = -1 if s[i] == '-' else 1
i += 1
# 轉換數字字符
while i < n and s[i].isdigit():
digit = int(s[i])
# 檢查溢出條件
if num > (INT_MAX - digit) // 10:
return INT_MAX if sign == 1 else INT_MIN
num = num * 10 + digit
i += 1
return sign * num
複雜度分析
特殊情況和邊界條件
在解題時,需考慮以下情況:
"-91283472332"
會返回 -2147483648
。"4193 with words"
,僅解析數字部分。這道題目是對字串解析和數字處理的綜合考驗。此解法按步驟進行處理,適用於各種邊界情況:
希望這篇文章能幫助你掌握 String to Integer (atoi) 的解法!