打敗演算法 字串轉換整數

2022-05-09 02:24:11 字數 1722 閱讀 4519

出自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 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字...