您的位置:首页 > 其它

【Leetcode】Valid Number

2016-01-16 02:51 381 查看
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.

这道题的难点我觉得不在于题目本身,而在于作为一个还没做题的娃,你根本不知道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好啊!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: