• 力扣(LeetCode)65. 有效数字(C++)


    模拟

    面向测试用例的编程,想象到了工程开发的画面。改需求,代码也可以精简!

    首先判断首位正负号,去除正负号,如果只有一个正负号字符,false。
    判断 ′ . ′ '.' . ,如果是单独的 ′ . ′ '.' . ,false ,如果 ′ . ′ '.' . 后面有 ′ e ′ 'e' e ′ E ′ 'E' E ,false。
    维护两个变量,记录 ′ . ′ '.' . ′ e ′ 'e' e 出现的次数,进入循环。
    遇到 ′ . ′ '.' . ,如果 ′ . ′ '.' . 出现过,false。
    遇到 ′ e ′ 'e' e,如果 ′ e ′ 'e' e 出现过,或者 ′ e ′ 'e' e 在首位或者最后一位,false。 ′ e ′ 'e' e 后可接正负号,如果正负号在最后一位,false。
    遇到非数字,false。
    逃出循环,true。

    class Solution {
    public:
        bool isNumber(string s) {//模拟
            if('+'==s[0]||'-'==s[0]) s = s.substr(1);
            if(s.empty()) return false;
            int dot = 0, e= 0;
            if('.'==s[0]&&(1==s.size()||s[1]=='e')) return false;
            for(int i = 0;i<s.size();i++){
                if('.'==s[i]){
                    if(e>0||dot>0) return false;
                    dot++;
                }else if('e'==s[i]||'E'==s[i]){
                    if(e>0||0==i||i==s.size()-1) return false;
                    e++;
                    if('-'==s[i+1]||'+'==s[i+1]){
                        i++;
                        if(s.size()-1==i) return false;
                    }
                }else if (s[i]>'9'||s[i]<'0') return false;
            }
            return true;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    时间复杂度 O ( n ) O(n) O(n) , 一次遍历字符串的时间复杂度 O ( n ) O(n ) O(n)

    空间复杂度 O ( 1 ) O(1) O(1) ,只使用了常量级空间。

    致语

    理解思路不重要,我也是面向测试用例编程。
    欢迎读者在评论区留言,答主看到就会回复的。

    AC

    AC

  • 相关阅读:
    四 Pytorch构建分类器
    P5733 【深基6.例1】自动修正
    pytest自动化测试两种执行环境切换的解决方案
    引用参考文献[1,2]或者[1-3]
    申请宣告专利权无效的主体有哪些 ?
    NPI加速器在烽火科技SMT车间的应用:贴片机程序制作效率的革新
    uniapp之actionsheet 自定义组件
    cmake入门
    Java工作流系统,快速实现业务审批(源码)
    K8S 核心对象
  • 原文地址:https://blog.csdn.net/Innocence02/article/details/128026547