LeetCode

剑指 Offer 20. 表示数值的字符串

模拟,字符串处理
对着规则,if-else判断就好了
LeetCode
复杂度分析:全过程只遍历了一遍字符串,那么时间复杂度为O(n),使用的额外空间位常数,那么空间复杂度为O(1)

class Solution {
public:
    bool isNumber(string s) {
        int i = 0, j = s.size() - 1;
        while(s[i] == ' ') ++i;//首先去掉前后的空格
        if(i == s.size()) return false;//排除只有空格的情况
        while(s[j] == ' ') --j;
        bool num = false;

        if(s[i] == '-' || s[i] == '+') ++i;//首先判断e前面的小数或者整数
        while(i <= j && isdigit(s[i])){
            num = true;//如果字符串没有数字,那么是错的
            ++i;
        } 
        if(i <= j && s[i] == '.') ++i;
        while(i <= j && isdigit(s[i])){
            num = true;
            ++i;
        } 


        if(i <= j && (s[i] == 'E' || s[i] == 'e')){//判断e之后的整数,注意只能是整数
            if(i + 1 > j) return false;//1e这种
            ++i;
            if(s[i] == '-' || s[i] == '+'){
                ++i;
                if(i > j) return false;//排除1e+这种
            }
            while(isdigit(s[i])) ++i;
            if(i <= j) return false;//如果没能扫描到最后一个字符,那么是错误的
        } 
        else if(i <= j && !isdigit(s[i]) && s[i] != 'E' && s[i] != 'e'){
            return false;//排除1+6这种
        } 

        return num;
        
    }
};
上一篇:循环结构 for 、 while


下一篇:DevOps让金融业数字化转型更敏捷 | 分享实录