[LeetCode] Valid Number
来源:互联网 发布:李敖 胡因梦 知乎 编辑:程序博客网 时间:2024/06/06 01:29
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.
Update (2015-02-10):
The signature of the C++
function had been updated. If you still see your function signature accepts a const char *
argument, please click the reload button to reset your code definition.
解题思路:
这道题其实并不难,主要是理解题意,且弄清楚double类型的各中情况。对于含e的double类型,e左边必须是浮点类型,右边必须是整型,且不能为空。还有一种情况就是两边可能有空格,这道题认为也是正确的,因此我的代码里面加上了一个trim函数。另外,不考虑大写的E,其实应该考虑的。
我的思路很简单,分有e跟无e两种情况讨论。注意c++的string类型中是find来查找,而不是indexof。
下面是代码:
class Solution {public: bool isNumber(string s) { //s = s.tolower(); s = trim(s); int eIndex = s.find('e'); if(eIndex == s.length() - 1){ return false; } else if(eIndex < 0){ return isDouble(s); }else{ return isDouble(s.substr(0, eIndex))&&isInt(s.substr(eIndex + 1)); } }private: bool isDouble(string s){ int len = s.length(); if(len == 0){ return false; } //符号位 if(s[0] == '+' || s[0] == '-'){ s = s.substr(1); len--; if(len==0){ return false; } } //只有一个小数点的情况 if(s[0]=='.'&&len==1){ return false; } int dotIndex = -1; //小数点的下标 for(int i = 0; i<len; i++){ if(s[i]=='.'){ if(dotIndex>=0){ //已经有小数点了 return false; }else{ dotIndex = i; } }else if(s[i]<'0'||s[i]>'9'){ return false; } } } bool isInt(string s){ //符号位 int len = s.length(); if(len == 0){ return false; } if(s[0] == '+' || s[0] == '-'){ s = s.substr(1); len--; if(len==0){ return false; } } for(int i=0; i<len; i++){ if(s[i]>'9'||s[i]<'0'){ return false; } } return true; } string trim(string s){ int len = s.length(); int l = 0,r = len - 1; //s左右第一个非空字符的位置 while(l<len){ if(s[l]==' '|| s[l] == '\t' || s[l]=='\r' || s[l]=='\n'){ l++; continue; } break; } while(r>=0){ if(s[r]==' '|| s[r] == '\t' || s[r]=='\r' || s[r]=='\n'){ r--; continue; } break; } s = s.substr(l, r - l +1); return s; }};
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)
- 解决eclipse连接不到genymotion的问题
- 新站排名三部曲之破而后立,打破平衡原理
- HTML5初窥2---新元素
- iOS7之定制View Controller切换效果
- RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer)(转)
- [LeetCode] Valid Number
- 整合greyBox和asp.net2.0,实现lightBox效果
- IOS中获取各个文件的目录路径的方法和NSFileManager类(整理)
- Unsupported major.minor version (jdk版本错误)解决方案 办法
- C冒泡递归折半等算法
- Manifest intent-filter
- Proguard returned with error code 1. See console
- Using ipset for security group(iptables too long from N*N -> N?)
- BZOJ系列3907《网格》题解