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;

    }
};
相关推荐
Morwit几秒前
【力扣hot100】 1. 两数之和
数据结构·c++·算法·leetcode·职场和发展
py有趣8 分钟前
力扣热门100题之岛屿的数量(DFS/BFS经典题)
leetcode·深度优先·宽度优先
SpiderPex23 分钟前
第十七届蓝桥杯 C++ B组-题目 (最新出炉 )
c++·职场和发展·蓝桥杯
无小道30 分钟前
算法——暴力+优化
算法·优化·暴力
Free Tester34 分钟前
如何判断 LeakCanary 报告的严重程度
java·jvm·算法
zyq99101_11 小时前
DFS算法实战:经典例题代码解析
python·算法·蓝桥杯·深度优先
智者知已应修善业1 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
广州灵眸科技有限公司1 小时前
为RK3588注入澎湃算力:RK1820 AI加速卡完整适配与评测指南
linux·网络·人工智能·物联网·算法
qinian_ztc1 小时前
frida 14.2.18 安装报错解决
算法·leetcode·职场和发展
AI应用实战 | RE1 小时前
012、检索器(Retrievers)核心:从向量库中智能查找信息
人工智能·算法·机器学习·langchain