出自leetcode上的題庫 —— 字串轉整數,本篇文章也主要是參考leetcode上的官方題解
官方題解採用了編譯原理中有限自動機的概念,沒想到編譯原理中的知識可以應用到演算法中,所以在這篇文章裡記錄下scala版本的解法,但是不對具體題解作介紹,想看具體解釋還請移步力扣官網
首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。接下來的轉化規則如下:
注意:
假如該字串中的第乙個非空格字元不是乙個有效整數字元、字串為空或字串僅包含空白字元時,則你的函式不需要進行轉換,即無法進行有效轉換。在任何情況下,若函式不能進行有效的轉換時,請返回 0
本題中的空白字元只包括空格字元 ' '
假設我們的環境只能儲存 32 位大小的有符號整數,那麼其數值範圍為 [
−231, 231
−1]。如果數值超過這個範圍,請返回 int_max (231
−1) 或 int_min (
−231)
示例 1:
輸入: "42
輸出: 42
示例 2:
輸入: " -42"
輸出: -4
解釋: 第乙個非空白字元為 '-', 它是乙個負號,我們盡可能將負號與後面所有連續出現的數字組合起來,最後得到 -42
示例 3:
輸入: "4193 with words"
輸出: 4193
解釋: 轉換截止於數字 '3' ,因為它的下乙個字元不為數字
示例 4:
輸入: "words and 987"
輸出: 0
解釋: 第乙個非空字元是 'w', 但它不是數字或正、負號,因此無法執行有效的轉換
示例 5:
輸入: "-91283472332
輸出: -2147483648
解釋: 數字 "-91283472332" 超過 32 位有符號整數範圍,因此返回 int_min (
−231)
即五元組 a =(k,σ,δ,q0,z)
有限狀態集k;有限輸入符號集 σ;轉移函式 δ;乙個開始狀態 q0;終態集合 z
轉移函式 δ :k × σ → k,特例:δ ( q, ε ) = q
這裡就借用官網的轉移圖來說明這些概念啦
有限狀態集k =
有限輸入符號集σ =
此處的"number"指0 ~ 9十個數字,"other"指除數字、正負號和空格外的所有其它字元
轉移函式δ( start,+ ) = δ( start,- ) = signed,δ( signed,number ) = number其它轉移函式不作過多舉例
開始狀態q0 = start
終態集合z =
官網還提供了轉移表的表示方法
若某狀態的乙個輸入符號能夠對應多個其它的狀態,則成為非確定性有限自動機nfa
def
myatoi(str: string): int = else if
(dx == "signed")
}ans * sign
}
演算法 字串轉換整數 atoi
題目 請你來實現乙個 atoi 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的...
演算法 字串轉換整數 atoi 。
請你來實現乙個 atoi 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。接下來的轉化規則如下 注意 假如該字串中的第乙個非空格字元不是乙個有效整數字元 字串為空或字串僅包含空白字元時,則你的函式不需要進行轉換,即無法進行有效轉換。在任何...
字串轉換整數
請你來實現乙個 atoi 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字...