AcWing 31. 表示数值的字符串java 简化
原题链接
困难
作者:
henhen敲
,
2020-05-20 13:07:42
,
所有人可见
,
阅读 618
分别判断e/E 前后字符串是否满足条件 前:是数字; 后:是整数;
(1)首先去掉多个小数点 以及正负号不在正确位置的情况 ;
(2)标记已经存在小数点 和 数字的情况
(3)存在以上其它字符 除掉
最后判断是否存在数字
整数的情况只需(1)中修改就可
class Solution {
public boolean isNum(String s, int start, int end, boolean point){
if(s.length()==0||start>=end) return false;
int len = s.length();
boolean flag = false;
for(int i=start; i<end; i++){
char cur = s.charAt(i);
boolean first = ((cur=='+'||cur=='-')&&i!=start)||(point&&cur=='.');
if(first) return false;
if(cur=='.') point = true;
else if(cur-'0'>=0&&cur-'0'<=9) flag = true;
else if(cur!='+'&&cur!='-'&&cur!='.')return false;
}
if(!flag) return false;
return true;
}
public boolean isNumber(String s) {
int i;
if(s==null||s.length()==0) return false;
int len = s.length();
char w = ' ';
for(i=0; i<len; i++){
w = s.charAt(i);
if(w=='E'||w=='e') break;
}
boolean ans = isNum(s, 0, i, false);
return (w=='E'||w=='e')?ans&&isNum(s, i+1, s.length(), true):ans;
}
}