思路
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; } };