文章目录
题目
代码(7.30 首刷看解析)
想反的一面,思路会明确许多。
class Solution {
public:
bool isNumber(string s) {
int n = s.size();
int i = 0;
while(i < n && s[i] == ' ') i++;
s = s.substr(i);
while(s.back() == ' ') s.pop_back();
bool numFlag = false, dotFlag = false, eFlag = false;
n = s.size();
for(int i = 0; i < n; i++) {
if(isdigit(s[i])) // 开始出现数字了
numFlag = true;
else if(s[i] == '.') { // 开始出现小数了
if(dotFlag || eFlag)
return false;
dotFlag = true; //
} else if(s[i] == 'e' || s[i] == 'E') {
if(eFlag || !numFlag) // e之前必须有数字且不能有e
return false;
eFlag = true;
numFlag = false; // 重置numFlag,确保e后面也有数字
} else if(s[i] == '-' || s[i] == '+') {
if(i != 0 && s[i-1] != 'e' && s[i-1] != 'E')
return false;
} else
return false;
}
return numFlag;
}
};