[LeetCode] 125: Valid Number
2017-09-10 20:53
447 查看
[Problem]
Validate if a given string is numeric.
Some examples:
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
[Analysis]
(1) 只有单个小数点,非法
(2) 小数点前面可以没有数字
(3) e的前面必须有数字
(4) e的后面必须有整数,可以有正负号,不能有小数点
[Solution]
Validate if a given string is numeric.
Some examples:
"0"=>
true
" 0.1 "=>
true
"abc"=>
false
"1 a"=>
false
"2e10"=>
true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
[Analysis]
(1) 只有单个小数点,非法
(2) 小数点前面可以没有数字
(3) e的前面必须有数字
(4) e的后面必须有整数,可以有正负号,不能有小数点
[Solution]
class Solution { public: bool isNumber(const char *s) { // Note: The Solution object is instantiated only once and is reused by each test case. // remove heading blanks while(*s == ' ')s++; if(*s == '\0')return false; // remove ending blanks int len = strlen(s), end = len-1; while(end >= 0 && s[end] == ' ')end--; // positive_negative, point, e, positive_negative after e bool num = false, pos = false, point = false, ee = false, eePos = false, eeNum = false; for(int i = 0; i <= end; ++i){ // digit if(isdigit(s[i])){ num = true; // number before point is done pos = true; // pos of the number is done if(ee){ eeNum = true; // number after e is done eePos = true; // pos after e is done } } // positive or negative else if(s[i] == '-' || s[i] == '+'){ // positive or negative of the number if(!pos){ // pos of the number have not been done pos = true; } // positive or negative of the e part else if(ee && !eePos){ // pos of the number have been done but pos after e not done eePos = true; } // invalid else{ return false; } } // point else if(s[i] == '.'){ pos = true; // pos of the number is done if(!point && !ee){ // point before e have not been done, the point could only before e point = true; } else{ return false; } } // e else if(s[i] == 'e'){ if(num && !ee){ // it must contains digits before e ee = true; } else{ return false; } } else{ return false; } } if(!num || (ee && !eeNum))return false; // no digits in this number or no digits after e return true; } };说明:版权所有,转载请注明出处。Coder007的博客
相关文章推荐
- LeetCode--Valid Number
- leetcode 065 —— Valid Number
- [Leetcode]Valid Number
- [leetcode] Valid Number
- LeetCode - Valid Number - Frequent
- leetcode ||65、 Valid Number
- leetcode 125 Valid Palindrome C++
- [LeetCode 125] Valid Palindrome
- LeetCode-Valid Number
- LeetCode|Valid Number
- leetcode8:Valid Number
- LeetCode --- Valid Number
- LeetCode 125 : Valid Palindrome (Java)
- 【leetcode】Valid Number
- LeetCode——Valid Number
- LeetCode:Valid Number
- LeetCode 125 Valid Palindrome
- LeetCode Valid Number
- 【LeetCode】125_Valid Palindrome
- leetcode:Valid Number