思路
1. WA 了十次
2.
// e9 False
// .1 true
// 3. true
// . false
// 343e+34 true
3. 分成了三个部分, 三部分之间有较弱的依赖关系, 还可以通过 bool 变量与返回值分开
代码
bool pa, pb, pc;
int FurtherA(const char *s, int &st, int ed) {
if(s[st] == '+' || s[st] == '-')
st ++;
if(st > ed) return -1;
if(s[st] == '.') {
st ++;
return 1;
} else {
if(!(s[st] <= '9' && s[st] >= '0')) return -1;
}
while(st <= ed) {
if(s[st] >= '0' && s[st] <= '9') {
st ++;
pa = true;
continue;
}
if(s[st] == '.') {
st ++;
return 1;
}
if(s[st] == 'e') {
st ++;
return 2;
}
return -1;
}
return 0;
}
int FurtherB(const char *s, int &st, int ed) {
if(st > ed) return 0;
//if(!(s[st] <= '9' && s[st] >= '0')) return -1;
while(st <= ed) {
if(s[st] >= '0' && s[st] <= '9') {
st ++;
pb = true;
continue;
}
if(s[st] == 'e') {
st ++;
return 2;
}
// else
return -1;
}
return 0;
}
int FurtherC(const char *s, int &st, int ed) {
if(s[st] == '+' || s[st] == '-')
st ++;
if(st > ed) return -1;
if(!(s[st] <= '9' && s[st] >= '0')) return -1;
while(st <= ed) {
if(s[st] >= '0' && s[st] <= '9') {
st ++;
pc = true;
continue;
}
return -1;
}
return 0;
}
class Solution {
public:
bool isNumber(const char *s) {
int len = strlen(s);
int i = 0, j = len-1;
// skip
while(i < len && s[i] == ' ') {
i ++;
}
while(j >= i && s[j] == ' ') {
j --;
}
if(i > j) return false;
if(i == j && s[i] == '.')
return false;
pa = pb = pc = false;
int res_a, res_b = 1, res_c = 1;
res_a = FurtherA(s, i, j);
//cout << res_a << endl;
if(res_a == 0 && pa) {
return true;
} else if (res_a == -1) {
return false;
} else if (res_a == 1) {
res_b = FurtherB(s, i, j);
}
if(res_b == 0 && (pa || pb)) {
return true;
} else if(res_b == -1) {
return false;
}
if(res_a == 2 || res_b == 2) {
res_c = FurtherC(s, i, j);
}
if(res_c == 0 && pc && (pa || pb )) {
return true;
}
return false;
}
};