题解 | 表示数值的字符串
表示数值的字符串
https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
bool readUnsignedInt(string& str, int& index, int& n){
bool ans = false;
if(index<=n&&str[index]<='9'&&str[index]>='0') ans = true;
while(index<=n&&str[index]<='9'&&str[index]>='0') ++index;
return ans;
}
bool readInt(string& str, int& index, int& n){
while(index<=n&&str[index]==' ') ++index;
if(index<=n&&(str[index]=='+'||str[index]=='-')) ++index;
return readUnsignedInt(str, index, n);
}
bool isNumeric(string str) {
// write code here
if(str.empty()) return false;
int index = 0, n = str.length()-1;
while(index<=n&&str[index]==' ') ++index;
while(n>=0&&str[n]==' ') --n;
bool flag1 = false, flag2 = false, flag3 = true;
flag1 = readInt(str, index, n);
if(str[index]=='.'){ ++index;
flag2 = readInt(str, index, n);}
if(str[index]=='e'||str[index]=='E') {++index;
flag3 = false;
flag3 = readInt(str, index, n);}
if((index==n+1)&&(flag1||flag2)&&flag3)
return true;
return false;
}
};
不要把太多中间情况带到小函数里,要尽量保持一个函数的功能清楚简单。
比如如果有指数部分,那么你只能检查是否为整数。如果你的小函数返回的是“是否为整数或者小数”,那你就有大麻烦了。
时间复杂度是O(n),这个字符串的长度;空间复杂度是O(1)。
