剑指Offer打卡day37——AcWing 31. 表示数值的字符串
作者:互联网
【题目描述】
【思路】
模拟
/**
合法的情况很多 判掉不合法的
遍历字符串 如果当前字符是
1. 数字,pass什么也不做
2. 是'.', 点数大于1了 或者 点后则return false
3. 是'e'或者'E' 个数大于1 或者e前面有点了 或者e在头或者尾 则return false
*/
class Solution {
public boolean isNumber(String s) {
//去除s前后的空格
s = s.trim();
//如果为空字符
if( s.equals("") ) return false;
//去除 正负号
if( s.charAt(0) == '+' || s.charAt(0) =='-') s = s.substring(1);
char c[] = s.toCharArray();
int n = c.length;
if( n == 0 || c[0] == '.' && n == 1) return false; // +. -.
int dot = 0, e = 0;
for(int i = 0; i < n; i ++){
if( c[i] >= '0' && c[i] <= '9' );
else if( c[i] == '-' || c[i] == '+') return false; //出现超过一个正(负)号
else if( c[i] == '.'){
dot ++;
if( dot > 1 || e > 0) return false; //12.45.8 1E2.3
}else if( c[i] == 'e' || c[i] == 'E'){
e ++;
if( i == 0 || i == n - 1 || e > 1 || i == 1 && c[0] =='.' )//e12 123e 23e54e .e44316
return false;
//e后面有带符号的数字
if( c[i + 1] == '+' || c[i + 1] == '-' ){
if( i + 2 == n ) return false; // 154e+
i ++; // 跳过加号
}
}else //其他非法字符直接返回false
return false;
}
return true;
}
}
标签:return,Offer,++,day37,int,&&,false,打卡,dot 来源: https://blog.csdn.net/weixin_44855907/article/details/116886980