我觉得valid number其实并不难# JobHunting - 待字闺中
z*3
1 楼
五个步骤
0)预处理,把输入的string给trim一下,这个适用于任何string作为输入的问题
1)写出is unsigned integer的方法
2)写出is integer的方法,借用步骤1写好的方法,加一个判断是不是+-号开头
3)写出is unsigned double的方法,借用步骤1写好的方法
这里有一个很特殊的corner case,就是.单独出现的情况,其实整个流程就这一个
corner case
4)写出is double的方法,借用步骤3写好的方法
5)然后valid number根据e做切割
e后面必需是integer,用步骤2的方法
e前面必需是double,用步骤4的方法
搞定
看起来很长,其实没啥东西,甚至没有脑筋急转弯的地方,就一个corner case记住就
好了
如果可以自由选择java类库的话,double.parseDouble(String)和integer.parseInt(
String)
加上try catch exception block,简简单单搞定一大串内容
废话说完咯,以下是代码
public class Solution {
public boolean isNumber(String s) {
// Start typing your Java solution below
// DO NOT write main() function
s=s.trim();
if(s.indexOf('e')==-1){
return isDouble(s);
}else{
return isDouble(s.substring(0,s.indexOf('e')))
&& isInteger(s.substring(s.indexOf('e')+1));
}
}
private boolean isDouble(String s){
if(s.startsWith("+")||s.startsWith("-")) return isUnsignedDouble(s.
substring(1));
else return isUnsignedDouble(s);
}
private boolean isUnsignedDouble(String s){
if(s.indexOf('.')==-1){
return isUnsignedInteger(s);
}else{
if(s.length()==1) return false;
int i = s.indexOf('.');
return (s.substring(0,i).equals("")||isUnsignedInteger(s.
substring(0,i)))&&
(s.substring(i+1).equals("")||isUnsignedInteger(s.substring(i+1)
));
}
}
private boolean isInteger(String s){
if(s.startsWith("+")||s.startsWith("-")) return isUnsignedInteger(s.
substring(1));
else return isUnsignedInteger(s);
}
private boolean isUnsignedInteger(String s){
if(s.length()==0) return false;
for(int i=0;i if(!Character.isDigit(s.charAt(i))) return false;
}
return true;
}
}
0)预处理,把输入的string给trim一下,这个适用于任何string作为输入的问题
1)写出is unsigned integer的方法
2)写出is integer的方法,借用步骤1写好的方法,加一个判断是不是+-号开头
3)写出is unsigned double的方法,借用步骤1写好的方法
这里有一个很特殊的corner case,就是.单独出现的情况,其实整个流程就这一个
corner case
4)写出is double的方法,借用步骤3写好的方法
5)然后valid number根据e做切割
e后面必需是integer,用步骤2的方法
e前面必需是double,用步骤4的方法
搞定
看起来很长,其实没啥东西,甚至没有脑筋急转弯的地方,就一个corner case记住就
好了
如果可以自由选择java类库的话,double.parseDouble(String)和integer.parseInt(
String)
加上try catch exception block,简简单单搞定一大串内容
废话说完咯,以下是代码
public class Solution {
public boolean isNumber(String s) {
// Start typing your Java solution below
// DO NOT write main() function
s=s.trim();
if(s.indexOf('e')==-1){
return isDouble(s);
}else{
return isDouble(s.substring(0,s.indexOf('e')))
&& isInteger(s.substring(s.indexOf('e')+1));
}
}
private boolean isDouble(String s){
if(s.startsWith("+")||s.startsWith("-")) return isUnsignedDouble(s.
substring(1));
else return isUnsignedDouble(s);
}
private boolean isUnsignedDouble(String s){
if(s.indexOf('.')==-1){
return isUnsignedInteger(s);
}else{
if(s.length()==1) return false;
int i = s.indexOf('.');
return (s.substring(0,i).equals("")||isUnsignedInteger(s.
substring(0,i)))&&
(s.substring(i+1).equals("")||isUnsignedInteger(s.substring(i+1)
));
}
}
private boolean isInteger(String s){
if(s.startsWith("+")||s.startsWith("-")) return isUnsignedInteger(s.
substring(1));
else return isUnsignedInteger(s);
}
private boolean isUnsignedInteger(String s){
if(s.length()==0) return false;
for(int i=0;i
}
return true;
}
}