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 | /** |