LeetCode65 Valid Number
来源:互联网 发布:淘宝儿童家具商品描述 编辑:程序博客网 时间:2024/06/06 05:05
question
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.
thinking
通信软件课上学了FSM,看到这题的时候眼前一亮,但苦于不会敲C,幸好从http://blog.csdn.net/suwei19870312/article/details/12094233和https://github.com/fuwutu/LeetCode/blob/master/Valid%20Number.cpp上看到了相关解法。下图给出了部分状态转移例子(图太丑TNT)。
在交题的时候发现代码是有一点点bug的,导致测试案例有的没过,这是修改之后的版本(非原创)
bool isNumber(char* s) { enum InputType { INVALID, // 0 SPACE, // 1 SIGN, // 2 DIGIT, // 3 DOT, // 4 EXPONENT, // 5 NUM_INPUTS // 6 }inputType; inputType= INVALID; int transitionTable[][NUM_INPUTS] = { -1, 0, 3, 1, 2, -1, // next states for state 0 -1, 8, -1, 1, 4, 5, // next states for state 1 -1, -1, -1, 4, -1, -1, // next states for state 2 -1, -1, -1, 1, 2, -1, // next states for state 3 -1, 8, -1, 4, -1, 5, // next states for state 4 -1, -1, 6, 7, -1, -1, // next states for state 5 -1, -1, -1, 7, -1, -1, // next states for state 6 -1, 8, -1, 7, -1, -1, // next states for state 7 -1, 8, -1, -1, -1, -1, // next states for state 8 }; int state = 0; while (*s != '\0') { if (isspace(*s)) inputType = SPACE; else if (*s == '+' || *s == '-') inputType = SIGN; else if (isdigit(*s)) inputType = DIGIT; else if (*s == '.') inputType = DOT; else if (*s == 'e' || *s == 'E') inputType = EXPONENT; else inputType=INVALID; //修改 state = transitionTable[state][inputType]; if (state == -1) return false; else ++s; } return state == 1 || state == 4 || state == 7 || state == 8;}
小结:enum的用法,transition[ ][NUM_INPUTS]数组的定义,以及最终状态的判断。
此思路值得借鉴。
try: float(s.strip()) return Trueexcept: return False
0 0
- LeetCode65 Valid Number
- leetcode65. Valid Number
- LeetCode65. Valid Number
- LeetCode65 Valid Number
- LeetCode65——Valid Number
- LeetCode65——Valid Number
- LeetCode65——Valid Number(使用DFA)来判断字符串是否为数字
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- web_reg_save_param在飞机订票中的例子
- HDOJ 2094 产生冠军 (拓扑排序)
- spring项目,数据字典信息写入缓存
- Java操作Oracle数据库自建工具库
- unity3d PlayerPrefs
- LeetCode65 Valid Number
- NOIP2010 乌龟棋(多维DP)
- java运行机制:跨平台的原因
- Xcode与第一个iOS程序
- major、minor宏在linux头文件位置
- HDU 1060 Leftmost Digit(数学)
- EasyPusher:基于live555的DarwinInjector实现的RTSP直播推送程序
- 高斯消元模板
- 第二章 算法分析