[leetcode] Valid Number
2014-07-12 14:27
162 查看
Validate if a given string is numeric.
Some examples:
分析:此题的确很难,难点在于需要考虑的情况太多,列举如下:
1、空格不能出现在数字之间
2、点和e最多只能出现一次
3、出现e之前必须有数字
4、正负号要么出现在数字的最前面,要么出现在紧接着e后面
5、e后面必须还得有数字
6、正负号最多出现两次
Some examples:
"0"=>
true
" 0.1 "=>
true
"abc"=>
false
"1 a"=>
false
"2e10"=>
true
分析:此题的确很难,难点在于需要考虑的情况太多,列举如下:
1、空格不能出现在数字之间
2、点和e最多只能出现一次
3、出现e之前必须有数字
4、正负号要么出现在数字的最前面,要么出现在紧接着e后面
5、e后面必须还得有数字
6、正负号最多出现两次
class Solution { public: bool isNumber(const char *s) { int len = (int)strlen(s); int left = 0; int right = len - 1; while(' ' == s[left]) ++left; while(' ' == s[right]) --right; for(int i = 0; i < len; ++i) { if('e' == s[i]) return isNumber(s, left, i-1) && isInteger(s, i+1, right); } return isNumber(s, left, right); } bool isNumber(const char* s, int start, int end) { if(start <= end) { int cur = start; bool hasDot = false; bool hasDigit = false; if('+' == s[cur] || '-' == s[cur]) ++cur; for(int i = cur; i <= end; ++i) { char ch = s[i]; if(ch >= '0' && ch <= '9') { hasDigit = true; continue; } if('.' == ch && !hasDot) hasDot = true; else return false; } return hasDigit; } return false; } bool isInteger(const char* s, int start, int end) { if(start <= end) { bool hasDigit = false; if('+' == s[start] || '-' == s[start]) ++start; for(int i = start; i <= end; ++i) if(s[i] >= '0' && s[i] <= '9') hasDigit = true; else return false; return hasDigit; } return false; } };
相关文章推荐
- [LeetCode] Valid Number
- leetcode|Valid Number(65)
- LeetCode65 Valid Number
- LeetCode 065 Valid Number
- [LeetCode][Java] Valid Number
- LeetCode65——Valid Number
- LeetCode-Valid Number-合法数字-状态机
- [LeetCode]Valid Number
- LeetCode-Valid Number - 有限状态机
- leetcode---Valid Number
- LeetCode 65 Valid Number
- Leetcode 65:Valid Number
- [Leetcode] valid number 验证数字
- LeetCode Online Judge 题目C# 练习 - Valid Number
- LeetCode-Valid Number - 有限状态机
- LeetCode——Valid Number
- leetcode-Valid Number
- [leetcode] Valid Number
- LeetCode - Valid Number - Frequent
- [LeetCode] Valid Number