LeetCode 刷题【65. 有效数字】

65. 有效数字

自己做

解:逐个检查各位置

cpp 复制代码
class Solution {
public:
    bool isNumber(string s) {
        int begin = 0;                  //检查起始
        int int_len = 0;                //整数部分长度
        int float_len = 0;              //小数部分长度

        if(s[0] == '-' || s[0] == '+')  //符号位存在,整数部分起始位置调整为从1开始
            begin++;

        //检查整数位
        while(begin < (int)s.size() && s[begin] != '.' && s[begin] != 'e' && s[begin] != 'E'){
            if(s[begin] > '9' || s[begin] < '0')            //如果整数位出现了非数字,说明这不是一个正确的数字
                return false;
            begin++;
            int_len++;
        }

        //检查小数位(如果有)
        if(begin < (int)s.size() - 1 && s[begin] == '.'){
            begin++;                                            //小数位起始      

            while(begin < (int)s.size() && s[begin] != 'e' && s[begin] != 'E'){
                if(s[begin] > '9' || s[begin] < '0')            //如果小数位出现了非数字,说明这不是一个正确的数字
                    return false;
                begin++;
                float_len++;
            }            
        }

        if(int_len == 0 && float_len == 0)                      //如果整数部分和小数部分都为空,说明这不是一个正确的数字
            return false;

        //检查指数位(如果有)
        if(begin < (int)s.size() && (s[begin] == 'e' || s[begin] == 'E')){
            begin++;                                            //指数位起始

            if(begin == (int)s.size())                          //如果不存在指数位,说明这不是一个正确的数字=>排除"1e"的情况
                return false;

            if(s[begin] == '-' || s[begin] == '+')              //符号位存在,指数部分起始位置调整
                begin++;

            if(begin == (int)s.size())                          //如果不存在指数位,说明这不是一个正确的数字=>排除"1e+"的情况"
                return false;

            while(begin < (int)s.size()){
                if(s[begin] > '9' || s[begin] < '0')            //如果小数位出现了非数字,说明这不是一个正确的数字
                    return false;
                begin++;
            }            
        }

        return true;

    }
};
相关推荐
小哈里5 小时前
【知识】从学科到实践:自然・工程・社科・人文|算法・研发・产品・品牌设计
程序人生·算法·产品·设计·工程
小π军5 小时前
最大重叠区间数量
数据结构·算法
镜像视界(浙江)科技有限公司5 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
a187927218316 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记6 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Navigator_Z6 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
wzdark7 小时前
多维数组在算法设计中的存储映射问题4
算法
Phil3238 小时前
多智能体不是越多越好:Google《Towards a Science of Scaling Agent Systems》论文深度解读
算法
6Hzlia8 小时前
【Classic 150 刷题计划】 LeetCode 26. 删除有序数组中的重复项 | C++ 快慢双指针经典模板
c++·算法·leetcode
huang5791479 小时前
基于滑动窗口的流式数据算法优化思路3
算法