這是一道字串處理的經典問題,這問題要求將一個字串轉換為32位元帶符號整數。解題的關鍵在於按照題目的規則,一步一步地解析輸入字串。
這題的解題步驟是要先處理前導空白字元(Whitespace),具體過程就是先遍歷字串,忽略所有開頭的空白字元(’ ’)。接下來,檢查下一個非空白字元,確定正負號(signedness),如果是’-’,則結果為負;如果是’+’,則結果為正。如果都不是,則預設為正。在確定正負號後,要將讀取位置向後移動一位。再來,就要讀取數字並轉換(Conversion),從正負號之後開始,連續讀取所有的數字字元(’0’到’9’)。如果第一個非空白非符號字元就不是數字,那麼這個字串無法轉換,結果為0。在讀取過程中,將每個數字字元轉換為對應的數值,並逐步建構整數。在轉換的過程中 ,就要處理溢位(Rounding),需要時刻檢查當前建構的整數是否會超出32位元帶符號整數的範圍,即[-2^31, 2^31-1]。最大值是INT_MAX = 2147483647,INT_MIN = -2147483648,在讀取新數字並相加之前,先進行溢位檢查。如果當前值已經大於INT_MAX / 10,或者等於INT_MAX / 10,但新數字大於7(因為INT_MAX的最後一位是7),那麼再讀取一個數字就會溢位。如果結果為正數,當發生溢位時,直接返回INT_MAX;如果結果為負數,當發生溢位時,直接返回INT_MIN。在讀取完所有連續數字字元後,便要返回結果(Return),根據之前確定的正負號,將最終計算出的數值返回。