[leetcode] Valid Number

来源:互联网 发布:linux定时器重启 编辑:程序博客网 时间:2024/06/06 14:10

Validate if a given string is numeric.

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;elsereturn 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;elsereturn false;return hasDigit;}return false;}};


0 0
原创粉丝点击