[LeetCode] Valid Number
2014-06-24 11:57
295 查看
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.
这道题着实费了不少代码,而且写出来的貌似也不是很好看,这道题AC率10.8%,挺低的了。
1.截取字符串从第一个非空格到倒数第一个非空格的字符串段
2.考虑长度若只为1的情况下的各种情况,“.”,"+","-“均不合理,但是确实可以以这些为开头
3.e是一个很关键的东西,在e之前和在e之后都必须包含有数字,容易忽视的是e后面允许存在一个"+""-"符号!
4.e和小数点都只能有1个,这是比较浅显的了
这道题关键在于题设的不确定性,需要多次修改完备程序,不能纯粹臆想。
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.
这道题着实费了不少代码,而且写出来的貌似也不是很好看,这道题AC率10.8%,挺低的了。
1.截取字符串从第一个非空格到倒数第一个非空格的字符串段
2.考虑长度若只为1的情况下的各种情况,“.”,"+","-“均不合理,但是确实可以以这些为开头
3.e是一个很关键的东西,在e之前和在e之后都必须包含有数字,容易忽视的是e后面允许存在一个"+""-"符号!
4.e和小数点都只能有1个,这是比较浅显的了
这道题关键在于题设的不确定性,需要多次修改完备程序,不能纯粹臆想。
class Solution { public: bool isNumber(const char *s) { bool pointflag = false; bool eflag = false; bool numflag = false; bool enumflag = false; bool symbolflag = false; int startpos = 0; int endpos = 0; int length = strlen(s); int i = 0; while ( *(s + i) ) { if (i >= length) { return false; } if ( *(s + i) != ' ') { startpos = i; break; } i++; } i = length - 1; while ( *(s + i)) { if (i < 0) { return false; } if ( *(s + i) != ' ') { endpos = i; break; } i--; } if (endpos < startpos) return false; length = endpos - startpos + 1; if ( !(s[startpos] >= '0' && s[startpos] <= '9' || s[startpos] == '.' || s[startpos] == '+' || s[startpos] == '-')) return false; if (length == 1) { if (s[startpos] != '.') return true; else if (s[startpos] == '+' || s[startpos] == '-') return false; else return false; } if (s[startpos] == '+' || s[startpos] == '-') { startpos++; } for (int i=startpos; i<=endpos; i++) { //a num can not have more than one point if (s[i] == '.' && pointflag == false) { pointflag = true; continue; } if (s[i] == '.' && pointflag == true) return false; //if already have a 'e',the rest part should not have any point //and e should not have more than one if (s[i] == 'e' && eflag == false && i != endpos && numflag == true) { pointflag = true; eflag = true; if (s[i+1] == '+' || s[i+1] == '-') { i++; } continue; } if (s[i] == 'e' && eflag == false && (i == endpos || numflag == false)) { return false; } if (s[i] == 'e' && eflag == true) return false; //normal condition if ( !(s[i] >= '0' && s[i] <= '9')) return false; else if (s[i] >= '0' && s[i] <= '9' && eflag == false) numflag = true; else if (s[i] >= '0' && s[i] <= '9' && eflag == true) enumflag = true; } if (eflag == false) { if (numflag == true) return true; } else { if (enumflag == true && numflag == true) return true; } return false; } };
相关文章推荐
- LeetCode——Valid Number
- [leetcode] Valid Number
- LeetCode - Valid Number - Frequent
- [LeetCode] Valid Number
- LeetCode: Valid Number
- leetcode ||65、 Valid Number
- [LeetCode]—Valid Number 判断字符串是否为合法数据(科学计数法)
- LeetCode65 Valid Number
- Leetcode241: Valid Number
- [leetcode]Valid Number
- Leetcode NO.65 Valid Number
- Valid Number(LeetCode)
- [LeetCode]题解(python):065-Valid Number
- LeetCode Online Judge 题目C# 练习 - Valid Number
- LeetCode-Valid Number - 有限状态机
- leetCode_Valid Number
- [LeetCode]Valid Number
- LeetCode 65 Valid Number
- LeetCode-65-Valid Number 脑残暴力
- [C++]LeetCode: 18 Valid Number