Leetcode中判断数字
2014-04-20 16:27
232 查看
今天,我“又”做的一道题,要是面试中遇到,铁定要跪。为啥?因为这完全是一道没有算法的题目嘛,考细心,考细节,考各种层出不穷的情况的处理。下面来看看这个题。
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.
首先来看这里数的定义,数可以为正负小数,整数,整数有科学计数表示。
(1)最前面可以出现"+","-", " . "。
这里"+","-"后面还可以出现 " . ",但是不管是哪一个, 后面必须还有整数,这里想想处理没有整数的情况!
(2)接下来部分可能出现 “ . ” ,“e”,数字(严格来书,还有"+","-")。
如果出现“e”,则需判断“e”是否在中间,而不是最后一位。“e”后面可以出现"+"和"-",如果出现,确保后面还有整数。
(3)" . "可以出现在数的任何位置,前面,中间,最后面。它的前后是什么没有限制,可以想象一下。比如0.8, .54, .e10,
最后还忘记说了,有空格,能确定的事先做了,比如前后的空格,先全部处理掉。
刚看了discuss部分的,整个人都不好了,看看人家写的几行python代码
再补一点,话说这样的题目,用正则表达式不就更简单了!?
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.
首先来看这里数的定义,数可以为正负小数,整数,整数有科学计数表示。
(1)最前面可以出现"+","-", " . "。
这里"+","-"后面还可以出现 " . ",但是不管是哪一个, 后面必须还有整数,这里想想处理没有整数的情况!
(2)接下来部分可能出现 “ . ” ,“e”,数字(严格来书,还有"+","-")。
如果出现“e”,则需判断“e”是否在中间,而不是最后一位。“e”后面可以出现"+"和"-",如果出现,确保后面还有整数。
(3)" . "可以出现在数的任何位置,前面,中间,最后面。它的前后是什么没有限制,可以想象一下。比如0.8, .54, .e10,
class Solution { public: bool isNumber(const char *s) { if(s==NULL) return false; int i,j; int dot=0; int len=strlen(s); //find the start for(i=0;i<len;i++) if(s[i]!=' ') break; if(i==len) return false; //find the end for(j=len-1;j>=0;j--) if(s[j]!=' ') break; //the new len if(j==i && !isNum(s[i])) return false; //首位只能为 +, -, .,数字这四种情况 if(s[i]=='+' || s[i]=='-' || isNum(s[i]) || s[i]=='.'){ if(s[i]=='+' || s[i]=='-'){ if(!isNum(s[i+1]) && s[i+1]!='.') return false; //下一位非数字,非点的情况 if(s[i+1]=='.'){ i++; if(i==j) return false; } } if(s[i]=='.'){ if(i<j&&!isNum(s[i+1]) || i==j) return false; //如果是点,那么后面必须还得有数字 dot++; } //处理剩下部分 for(++i;i<=j;i++){ //中间可能出现的字符有数字、点、e if(s[i]=='.' &&!dot || s[i]=='e' || isNum(s[i])){ if(s[i]=='e'){ //e只能中间出现 if(i==j) return false; if(i<j&&(s[i+1]=='+'||s[i+1]=='-')){ i++; if(i==j) return false; } for(++i;i<=j;i++) if(!isNum(s[i])) return false; return true; } if(s[i]=='.') dot++; } else return false; } return true; } return false; } bool isNum(char c){ return c<='9'&&c>='0'; } };
最后还忘记说了,有空格,能确定的事先做了,比如前后的空格,先全部处理掉。
刚看了discuss部分的,整个人都不好了,看看人家写的几行python代码
def isNumber(self, s): try: float(s) return True except: return False
再补一点,话说这样的题目,用正则表达式不就更简单了!?
相关文章推荐
- leetcode:Palindrome Number (判断数字是否回文串) 【面试算法题】
- leetcode:Palindrome Number (判断数字是否回文串) 【面试算法题】
- leetcode 9 给一个int类型的数字,判断是否是回文数
- leetcode第9题,判断数字是否是回文数字的两种方法
- 【LeetCode008-009算法/编程练习C++】string转int(atoi),判断数字是否是回文
- LeetCode65——Valid Number(使用DFA)来判断字符串是否为数字
- leetcode-338. Counting Bits 统计十进制数字的二进制表示中1的个数,列表的定义,奇偶判断
- leetcode_125. Valid Palindrome 判断字母数字回文串,大小写转化
- Leetcode 07 Reverse Integer(数字反转) && 09 Palindrome number(回文判断)
- LeetCode--判断一个十进制数字是否为回文
- LeetCode 9 Palindrome Number(回文数字判断)
- 【leetcode】对撞指针应用之回文字符串判断(忽略大小写,以及出数字外其他字符)
- leetcode——Palindrome Number 判断整数数字是否为回文(AC)
- LeetCode Valid Number(判断字符串是否是合法的数字表示 )
- leetcode_9. Palindrome Number 判断一个整数是否是回文串数字
- Palindrome Number 判断一个数字是否是回文数字@LeetCode
- Leetcode 9. Palindrome Number(判断回文数字)
- LeetCode -- 判断链表中是否有环
- 判断输入框中输入的是否为数字
- oracle中字符中有数字的判断