20.
题目:
想法:写两个函数判断字符串是否为整数/小数.在主函数中将字符串按e/E拆分为字符串数组,若长度为2(且最后一个字符不是e/E),则判断左侧是否为整数/小数,以及右侧是否为整数.否则应判断整体是否为整数/小数. 返回与结果即可.
代码:
class Solution {
public boolean isNumber(String s) {
boolean res = true;
s=s.trim();
String[] se1=s.split("e");
String[] se2=s.split("E");
// 4e11e 注意这种情况下 se1.length也为2,所以还应判断最后一位是否为e
if(se1.length==2 && (s.charAt(s.length()-1)!='e')){//能被e分成两段
// e前可整数可小数
res &= (isInteger(se1[0])|isDecimal(se1[0]));
// e后只可为整数
res &= isInteger(se1[1]);
}else if(se2.length==2 && (s.charAt(s.length()-1)!='E')){//能被E分成两段
// e前可整数可小数
res &= (isInteger(se2[0])|isDecimal(se2[0]));
// e后只可为整数
res &= isInteger(se2[1]);
}else{
res &= (isInteger(s)|isDecimal(s));
}
return res;
}
//判断是否为整数
private boolean isInteger(String s){
int i=0;
//空串非整数
if(s.length()==0)
return false;
//判断是否有符号位
if(s.charAt(0)=='+'||s.charAt(0)=='-')
i++;
//如果加上符号总长<2,即无数字,则非整数
if(i==1 && s.length()<2)
return false;
while(i<s.length()){
//如果不是数字则直接返回false
if(s.charAt(i)<'0' || s.charAt(i)>'9')
return false;
i++;
}
return true;
}
//判断是否为小数
private boolean isDecimal(String s){
int i=0;
//空串非小数
if(s.length()==0)
return false;
//判断是否有符号位
if(s.charAt(0)=='+'||s.charAt(0)=='-')
i++;
//至少有一个'.'和一个数字(和一个可选符号)
if(i==0 && s.length()<2)
return false;
if(i==1 && s.length()<3)
return false;
//统计'.'的个数
int countDot=0;
while(i<s.length()){
if(s.charAt(i)=='.')
countDot++;
//如果不是'.'和数字则直接返回false
else if(s.charAt(i)<'0' || s.charAt(i)>'9')
return false;
i++;
}
if(countDot==1)
return true;
else
return false;
}
}
结果:
67.
题目:
想法(参考k神):
- 字符转数字并拼接
- 数字越界处理
代码:
class Solution {
public int strToInt(String str) {
str=str.trim();
int i=0;
int sign=1;//1为正,-1为负
if(str.length()==0)
return 0; //若字符串为空,不可转为数字,返回0
if(str.charAt(0)=='+')
i++;
if(str.charAt(0)=='-'){
i++;
sign=-1;
}
int res=0;
int boundary=Integer.MAX_VALUE/10;
while(i<str.length() && str.charAt(i)>='0'&&str.charAt(i)<='9'){
//计算本位数字
int x=str.charAt(i)-'0';
if( res>boundary || (res==boundary && x>7) )
//越界
return sign==1?Integer.MAX_VALUE:Integer.MIN_VALUE;
else
res=res*10+x;
i++;
}
//别忘记符号位
return sign*res;
}
}
结果: