演算法 Valid Number 有效數字

2021-09-28 23:15:39 字數 2788 閱讀 2893

給出乙個數字的字串,可以是科學記數,其中 「3. 「、 " .3」、」+.8"也算是正確記數

「0」 => true

" 0.1 " => true

「abc」 => false

「1 a」 => false

「2e10」 => true

" -90e3 " => true

" 1e" => false

「e3」 => false

" 6e-1" => true

" 99e2.5 " => false

「53.5e93」 => true

" --6 " => false

「-+3」 => false

「95a54e53」 => false

「3. " => true

" .3」 => true

「+.8」 => true

關鍵字:有限狀態自動機

首先輸入為:invalid,blank,sign,digit,dot,exponent共六類

輸入後字串的狀態共有八種為:

0:初始無輸入或者只有blank的狀態

1:輸入了數字之後的狀態

2:前面無數字,只輸入了dot的狀態

3:輸入了符號狀態

4:前面有數字和有dot的狀態

5:『e』 or 'e』輸入後的狀態

6:輸入e之後輸入sign的狀態

7:輸入e後輸入數字的狀態

8:前面有有效數輸入之後,輸入blank的狀態

其中第1、4、7、8種狀態為有效狀態

如此,在遍歷字串的時候,字串的狀態也會不斷變換,通過對比狀態是否有效來判斷字串是否為有效數字

class

func

validnumbersolution

(_ s:

string)-

>

bool

// 將不同狀態下輸遇到不同輸入時得到的狀態以二位陣列的形式列出來,-1代表非法狀態

let transtable :[[

int]]=

[//0inva,1spa,2sig,3di,4do,5e[-

1,0,

3,1,

2,-1

],//0初始無輸入或者只有blank的狀態[-

1,8,

-1,1

,4,5

],//1輸入了數字之後的狀態[-

1,-1

,-1,

4,-1

,-1]

,//2前面無數字,只輸入了dot的狀態[-

1,-1

,-1,

1,2,

-1],

//3輸入了符號狀態[-

1,8,

-1,4

,-1,

5],//4前面有數字和有dot的狀態[-

1,-1

,6,7

,-1,

-1],

//5'e' or 'e'輸入後的狀態[-

1,-1

,-1,

7,-1

,-1]

,//6輸入e之後輸入sign的狀態[-

1,8,

-1,7

,-1,

-1],

//7輸入e後輸入數字的狀態[-

1,8,

-1,-

1,-1

,-1]

,//8前面有有效數輸入之後,輸入blank的狀態];

// 創造數字陣列,用以判斷輸入的是否為數字

var numpool =

[character](

)for i in0.

..9// 創造各合法字元常量,用以比對

let blank =

character

(" "

)let plus =

character

("+"

)let sub =

character

("-"

)let dot =

character

("."

)let eex =

character

("e"

)let

eex=

character

("e"

)// 初始狀態為無輸入或者只有blank的狀態

var state =0;

// 遍歷字串

for ch in s

else

if(ch == plus || ch == sub)

else

if(numpool.

contains

(ch)

)else

if(ch == dot)

else

if(ch == eex || ch ==

eex)

// 將當前當前狀態和當前輸入作為序號找到目標狀態

state =

(transtable[state]

)[input.rawvalue]

;// 非法狀態,即為非法字串

if(state ==-1

);}// 最終狀態只有為第1、4、7、8l種狀態時,才是有效數字

return state ==

1|| state ==

4|| state ==

7|| state ==8;

}

數字空格Valid Number

本文是一篇關於數字空格的帖子 validate if a given string is numeric.some examples 0 true 0.1 true abc false 1 a false 2e10 true note it is intended for the problem s...

演算法 有效的括號

偽 1.得到字串.2.建立乙個linkedlist 用來模擬stack 2.非空判斷,空返回true 3.遍歷字串 如果第一次碰到三個括號 第乙個括號是右括號必定是錯誤的 如果碰到左括號,給linkedlist中新增對應的右括號,碰到右括號,判斷linkedlist末尾的右括號是否與其匹配,匹配則刪...

演算法 有效的括號

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。1 輸入 輸出 false 2 輸入 輸出 true 在最開始看到該題時是想將輸入的字串都先放入棧中,然後對棧進行操作 但是這種方法有點複雜。後邊實在...