LeetCode 65 - Valid Number
題目
題目連結:https://leetcode.com/problems/valid-number/submissions/
判斷一個字串是不是一個合法的數字。
範例說明
1 | "0" => true |
想法
根據熱心的網友在討論區的提供:
https://leetcode.com/problems/valid-number/discuss/23741/The-worst-problem-i-have-ever-met-in-this-oj
1 | test(1, "123", true); |
我們可以歸納出以下重點:
- 合法的數字的前後可以有空白,但是中間不可以有空白。
'.'
只能出現一次,且要在'e'
前面出現。注意:'.'
的前面不一定要有數字,例如:".1" -> true
。'e'
只能出現一次,且要在數字之後出現。注意'e'
的後面一定還要有數字。'+'
、'-'
一定要在開頭,或是'e'
的正後面出現。
實作細節
一開始先去除頭尾的空白,接著再檢查剩下的字串,可以知道剩下的字串內只能出現 0 ~ 9
, '.'
, 'e'
, '+'
, '-'
,只要有其他字元出現一律不合法。
接著紀錄 numberVis
代表數字有沒有出現過;eVis
代表 'e'
有沒有出現過;pointVis
代表 .
有沒有出現過。最後合法的條件是 numberVis = true
。
注意 'e'
出現過後應該要將 numberVis
設為 false
,因為 'e'
後面一定要有數字。
程式碼
1 | /** |