今天在家,做了一會 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)
}