LeetCode 題解(“字符串轉換整數”)

今天在家,做了一會 leetcode 上的題目,這次的題目不難,是關于 “字符串轉換整數” 的。總的來說,需要注意處理好邊際條件,就可以順利解答了。

請你來實現(xiàn)一個 atoi 函數,使其能將字符串轉換成整數。

首先,該函數會根據需要丟棄無用的開頭空格字符,直到尋找到第一個非空格的字符為止。接下來的轉化規(guī)則如下:

如果第一個非空字符為正或者負號時,則將該符號與之后面盡可能多的連續(xù)數字字符組合起來,形成一個有符號整數。
假如第一個非空字符是數字,則直接將其與之后連續(xù)的數字字符組合起來,形成一個整數。
該字符串在有效的整數部分之后也可能會存在多余的字符,那么這些字符可以被忽略,它們對函數不應該造成影響。
假如該字符串中的第一個非空格字符不是一個有效整數字符、字符串為空或字符串僅包含空白字符時,則你的函數不需要進行轉換,即無法進行有效轉換。

在任何情況下,若函數不能進行有效的轉換時,請返回 0 。

注意:

本題中的空白字符只包括空格字符 ' ' 。
假設我們的環(huán)境只能存儲 32 位大小的有符號整數,那么其數值范圍為 [?231, 231 ? 1]。如果數值超過這個范圍,請返回 231 ? 1 或 ?231 。

以下是 Go 語言實現(xiàn)寫的答案:

func myAtoi(s string) int {
    var res int64
    sign, letter, number := false, false, false
    var flag int64 = 1
    for _, v := range s {
        if v == ' ' {
            if sign || letter || number {
                break
            }
        } else if v == '-' || v == '+' {
            if sign || letter || number {
                break
            }
            sign = true
            if v == '-' {
                flag = -1
            }
        } else if v >= '0' && v <= '9' && !letter {
            number = true
            res = res*10 + (int64(v) - int64('0'))
        } else {
            letter = true
        }
        if res*flag < math.MinInt32 {
            return math.MinInt32
        }
        if res*flag > math.MaxInt32 {
            return math.MaxInt32
        }
    }
    return int(res * flag)
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容