LeetCode: 65.Valid Number
来源:互联网 发布:机床的重要性 知乎 编辑:程序博客网 时间:2024/06/09 20:42
LeetCode: 65.Valid Number
题目描述
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代码
class Solution {public: bool Start(const string& s, size_t pos) { if(s.empty()) return false; if(s[pos] == '+' || s[pos] == '-') // +/- number { return StatusC(s, pos+1); } else if(s[pos] >= '0' && s[pos] <= '9') // number { return StatusEndA(s, pos+1); } else if(s[pos] == '.') // .number { return StatusG(s, pos+1); } else { return false; } } bool StatusEndA(const string& s, size_t pos) { if(pos == s.size()) return true; if(s[pos] =='.') { return StatusEndB(s, pos+1); } else if(s[pos] == 'e') { return StatusD(s, pos+1); } else if(s[pos] >= '0' && s[pos] <= '9') { return StatusEndA(s, pos+1); } else { return false; } } bool StatusEndB(const string& s, size_t pos) { if(pos == s.size()) return true; if(s[pos] == 'e') { return StatusD(s, pos+1); } else if(s[pos] >= '0' && s[pos] <= '9') { return StatusEndB(s, pos+1); } else { return false; } } bool StatusC(const string& s, size_t pos) { if(pos == s.size()) return false; if(s[pos] >= '0' && s[pos] <= '9') { return StatusEndA(s, pos+1); } else if(s[pos] == '.') { return StatusG(s, pos+1); } else { return false; } } bool StatusD(const string& s, size_t pos) { if(pos == s.size()) return false; if(s[pos] == '+' || s[pos] == '-') { return StatusE(s, pos+1); } else if(s[pos] >= '0' && s[pos] <= '9') { return StatusEndF(s, pos+1); } else { return false; } } bool StatusE(const string& s, size_t pos) { if(pos == s.size()) return false; if(s[pos] >= '0' && s[pos] <= '9') { return StatusEndF(s, pos+1); } else { return false; } } bool StatusG(const string&s, size_t pos) { if(pos == s.size()) return false; if(s[pos] >= '0' && s[pos] <= '9') { return StatusEndB(s, pos+1); } else { return false; } } bool StatusEndF(const string& s, size_t pos) { if(pos == s.size()) return true; if(s[pos] >= '0' && s[pos] <= '9') { return StatusEndF(s, pos+1); } else { return false; } } bool isNumber(string s) { size_t beg = s.find_first_not_of(' '); size_t end = s.find_last_not_of(' '); if(beg == s.npos || end == s.npos) return false; s = s.substr(beg, end-beg+1); return Start(s, 0); }};
阅读全文
0 0
- LeetCode --- 65. Valid Number
- [Leetcode] 65. Valid Number
- [LeetCode]65.Valid Number
- Leetcode-65.Valid Number
- 【leetcode】65.Valid Number
- leetcode 65. Valid Number
- LeetCode 65. Valid Number
- Leetcode 65. Valid Number
- LeetCode 65. Valid Number
- LeetCode - 65. Valid Number
- [LeetCode] 65. Valid Number
- leetcode 65.Valid Number
- leetcode 65. Valid Number
- leetcode 65.Valid Number
- Leetcode--65. Valid Number
- leetcode-65. Valid Number
- Leetcode 65. Valid Number
- 【LeetCode】65. Valid Number
- 在Jekyll博客添加评论系统:gitment篇
- IoC容器
- 地牢逃脱 (BFS)
- vue2.0
- android 自定义View之将字体绘制在Rect中间
- LeetCode: 65.Valid Number
- HDU 1159 Common Subsequence(最长公共子序列(LCS) 动态规划(DP))
- 医院刚刚严重发声,情况紧急!全民必看!
- binary-tree-postorder-traversal
- C#中使用seriport和单片机进行串口长数据收发不全,解决办法
- Python自定义模块并发布与安装
- SQL—授权grant与回收revoke
- 字典树(trie树)
- Python csv模块的使用