leetcode-Valid Number
2016-08-24 16:03
246 查看
Valid Number
题目:
Validate if a given string is numeric.Some examples:
–“0” => true
–” 0.1 ” => true
–“abc” => false
–“1 a” => false
–“2e10” => true
思路:
有限状态机:清晰明了,网上资料较多,比较难以想到if-else,比较难理清楚多种情况,思路较为直接
1) 去掉字符串前后空格
2) 再进行判断
情况分类:
合法输入:输入 | 限制条件 |
---|---|
. | 前面可有可无(有符号或无符号)数字;前面无数字的时候,后面必须跟无符号数字;前面无数字的时候,不是合法的结束;只能出现一次 |
e | 前后必须有(有符号或无符号)数字,后面的数字必须为整数;不是合法的结束;只能出现一次 |
数字 | 无,是合法结束 |
+、- | 只能出现在最开始,或者e后面;不是合法的结束 |
代码:
class Solution { public: void trim(string &s) // 去掉前后空格 { if (s.empty()) { return; } s.erase(0,s.find_first_not_of(" ")); s.erase(s.find_last_not_of(" ") + 1); } bool isNumber(string s) { trim(s); if (s.empty()) return false; int i = 0; // 判断点和e是否是第一次出现,以及判断是否出现过数字 bool isFirstP = 1, isFirste = 1, hasNum = 0; while (i < s.length()) { if ( (s[i] == '+' || s[i] == '-') && (i == 0 || (s[i-1] == 'e' && i != s.length() - 1)) ) { i++; continue; } if ( (s[i] >= '0' && s[i] <= '9') || (s[i] == '.' && isFirstP && isFirste && (i != s.length() - 1 || hasNum)) ) { if (s[i] == '.') isFirstP = 0; else hasNum = 1; i++; continue; } else if (s[i] == 'e' && isFirste && hasNum && i != s.length() - 1) { isFirste = 0; i++; continue; } return false; } return true; } };
相关文章推荐
- LeetCode-Valid Number - 有限状态机
- Leetcode: Valid Number
- LeetCode 65 Valid Number
- Leetcode 65:Valid Number
- [Leetcode] valid number 验证数字
- leetcode|Valid Number(65)
- Leetcode 150题目终结贴 - Valid Number
- LeetCode --- Valid Number
- [LeetCode] Valid Number 确认是否为数值
- [Leetcode] Valid Number
- Leetcode: Valid Number
- LeetCode 065 Valid Number
- [LeetCode][Java] Valid Number
- 【leetcode】Valid Number
- Leetcode -- Valid Number
- [Leetcode 27] 65 Valid Number
- LeetCode题解: Valid Number
- [Leetcode] Valid Number
- LeetCode65——Valid Number
- 【leetcode刷题笔记】Valid Number