[LeetCode] Valid Number
来源:互联网 发布:主宰西游装备进阶数据 编辑:程序博客网 时间:2024/05/29 10:36
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.
这道题着实费了不少代码,而且写出来的貌似也不是很好看,这道题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; }};
0 0
- LeetCode: Valid Number
- LeetCode : Valid Number
- Leetcode: Valid Number
- [Leetcode] Valid Number
- leetcode 50: Valid Number
- [LeetCode] Valid Number
- 【leetcode】Valid Number
- [LeetCode]Valid Number
- [leetcode] Valid Number
- LeetCode | Valid Number
- LeetCode-Valid Number - 有限状态机
- leetcode Valid Number
- Leetcode: Valid Number
- 【leetcode】Valid Number
- Leetcode Valid Number
- LeetCode题解: Valid Number
- LeetCode Valid Number
- [Leetcode] Valid Number (Java)
- 基于CodeMirror&TernJS的汉语Javascript编辑器(和翻译器)
- 112_leetcode_Binary Tree Maximum Path
- 实现基于DNS的负载均衡
- 000:以NotePad++作为Python IDE
- poj 3204 Ikki's Story I - Road Reconstruction && zoj 2532 Internship 网络流关键边
- [LeetCode] Valid Number
- Apache AB 第一个测试案例及测试结果解释
- 黑马程序员-C语言编程中include的用法
- 程序员必须知道的10大基础实用算法及其讲解
- 两个输出文件名解析为同一个输出路径:“obj\x86\Debug\SafetyValve.FormNewTest.resources”SafetyValve
- 豆瓣客户端的实现08
- DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers)
- 【整理】int和long long的最大值测试
- OSG:3.内存管理