【Leetcode】Valid Number
2016-01-16 02:51
381 查看
Validate if a given string is numeric.
Some examples:
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
这道题的难点我觉得不在于题目本身,而在于作为一个还没做题的娃,你根本不知道valid number的标准在哪。直到你写完代码,放进去test各种corner cases的时候,你发现“哦哦这个也不算valid,哦哦这个也不算valid”。比如我一开始意识到可能会有正常的int和float例如"123",“1.234”或者“-3.5”甚至科学计数法“-3e15”这样。但是你可能不会意识到"1 a"或者“1 .3”肯定不是valid number,但是“1 ”或者“ 234”就是valid number,甚至"-1.e15"都是valid
number。而我在写的过程中只是单纯地把它们分成1)科学计数法 2)非科学计数法,通过来判断是否s.contains("e")。当然,在这之前,我会先去test,这个里面是不是有“wrong blank”,比如说“ 1”就是没问题的空格,而“1 2”就是有问题的空格,也就是说空格前后不能有任何东西就是有效的空格。然后对于非科学计数法,判断前后是不是float或者int。
like this:
然后发现不行。。。没有考虑小数点的各种情况……于是。。。我就想到了python,并且做了个弊……
这么来看,还是scripting language好啊!!!
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.
这道题的难点我觉得不在于题目本身,而在于作为一个还没做题的娃,你根本不知道valid number的标准在哪。直到你写完代码,放进去test各种corner cases的时候,你发现“哦哦这个也不算valid,哦哦这个也不算valid”。比如我一开始意识到可能会有正常的int和float例如"123",“1.234”或者“-3.5”甚至科学计数法“-3e15”这样。但是你可能不会意识到"1 a"或者“1 .3”肯定不是valid number,但是“1 ”或者“ 234”就是valid number,甚至"-1.e15"都是valid
number。而我在写的过程中只是单纯地把它们分成1)科学计数法 2)非科学计数法,通过来判断是否s.contains("e")。当然,在这之前,我会先去test,这个里面是不是有“wrong blank”,比如说“ 1”就是没问题的空格,而“1 2”就是有问题的空格,也就是说空格前后不能有任何东西就是有效的空格。然后对于非科学计数法,判断前后是不是float或者int。
like this:
package testAndfun; public class validNum { public static void main(String[] args){ validNum vn = new validNum(); System.out.println(vn.isNumber("12")); } public boolean isNumber(String s) { if(!isWrongBlank(s)) return false; if(s.contains("e")){ System.out.println("goes with exp"); int e = locateE(s); return isFloat(s.substring(0,e)) && isInt(s.substring(e+1, s.length())); } else{ return isFloat(s); } } public static boolean isWrongBlank(String s){ for(int i=1;i<s.length()-1;i++){ if(s.charAt(i)==' '&&s.charAt(i-1)!=' '&&s.charAt(i+1)!=' '){ return false; } } return true; } public static boolean isInt(String s){ try{ int f = Integer.parseInt(s); return true; } catch(Exception e){ return false; } } public static boolean isFloat(String s){ try{ float f = Float.parseFloat(s); return true; } catch(Exception e){ return false; } } public static int locateE(String s){ for(int i=0;i<s.length();i++) if(s.charAt(i)=='e') return i; return -1; } }
然后发现不行。。。没有考虑小数点的各种情况……于是。。。我就想到了python,并且做了个弊……
def isNumber(s): ss = s.strip() try: float(ss) except ValueError: return False return True
这么来看,还是scripting language好啊!!!
相关文章推荐
- [python] List Comprehension
- 典型代码-结构与类-2
- Java多线程学习笔记(三)同步和异步
- 面向对象1
- 关于Android Studio乱码的解决办法
- Android 数据存储之 文件存储
- python 学习第十一课 上下文管理 paramiko 堡垒机 mysql操作
- 典型代码-结构与类-1
- python学习笔记-Day11-- MySQLdb
- hdu5514Frogs
- 隐式游标的属性值变化
- MySQL数据库事务隔离级别(Transaction Isolation Level)
- USBWebServer 中文便携版 快速搭建 PHP/MySQL 网站服务器环境
- COM开发入门
- 彻底消除wine中文乱码
- Tomcat 服务器启动很慢,报数据库连接不上,又参杂了其他项目的错误
- 【CodeForces】[606A]Magic Spheres
- Fast integer math tricks for C
- 【杭电】[1201]18岁生日
- scala - 从合并两个Map说开去 - foldLeft 和 foldRight 还有模式匹配