• 有效数字(表示数值的字符串),剑指offer,力扣


    目录

    题目地址:

    我们直接看题解吧:

    难度分析:

    解题方法:

    审题目+事例+提示:

    解题思路:

    代码实现:


    题目地址:

    LCR 138. 有效数字 - 力扣(LeetCode)

    难度:中等

    今天刷有效数字(表示数值的字符串),大家有兴趣可以点上看看题目要求,试着做一下

    我们直接看题解吧:

    难度分析:

    这道题难倒是不算难,主要比较繁杂,因为要找出它的各种情况状态。

    解题方法:

    方法1、逐位判断(按顺序扫描字符串)

    方法2、正则表达式(不太建议,面试用不上)

    审题目+事例+提示:

    1、本题即允许字符串首末两端有一些额外的空格

    2、表示数值的字符串遵循共同的模式:

          A[.[B]][e|EC]或者.B[e|EC]。

        以上模式的含义是:

     A为数值的整数部分B为跟在小数点之后的小数部分C为跟在e或者E之后的指数部分

    其中,A部分可以没有,比如小数.123代表0.123。但如果一个数没有整数部分,那么小数部分必须有

     具体来说:

       A和C(也就是整数部分和指数部分)都是可能以"+"、"-"开头或者没有符号的数字串,

      B是数字序列,但前面不能有符号。

    解题思路:

    1、设置三个boolean类型的变量,初始化为false

    2、循环遍历字符串进行判断:

       ‘.出现的正确情况:只出现一次,且在e的前面

       ‘e出现的正确情况:只出现一次,且出现前有数字

       ‘+,-出现的正确情况:只能出现在开头和e的后一位

       符合条件的的字符重新置为true

    3、返回对应的布尔值

    代码实现:

    1. class Solution {
    2. public boolean isNumber(String s) {
    3. if (s == null || s.length() == 0) return false; //首先判断字符串是否为空
    4. s = s.trim();//去掉字符串两端的空格
    5. boolean numFlag = false;
    6. boolean dotFlag = false; //设置三个变量,初始化false
    7. boolean eFlag = false;
    8. for (int i = 0; i < s.length(); i++) {
    9. //判定是否为数字,则标记numFlag
    10. if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
    11. numFlag = true;
    12. }
    13. //判定是否为. 需要没出现过.并且没出现过e
    14. else if (s.charAt(i) == '.' && !dotFlag && !eFlag) {
    15. dotFlag = true;
    16. }
    17. //判定是否为e,需要没出现过e,并且出过数字了
    18. else if ((s.charAt(i) == 'e' || s.charAt(i) == 'E') && !eFlag && numFlag) {
    19. eFlag = true;
    20. numFlag = false;//为了避免123e这种情况,出现e之后就标志重置为false
    21. }
    22. //判定为+-符号,只能出现在第一位或者紧接e后面
    23. else if ( (s.charAt(i) == '+' || s.charAt(i) == '-') {
    24. //+-出现在0位置或者e/E的后面第一个位置才是合法的
    25. if(i != 0 && str[i-1] != 'e' && str[i-1] != 'E'){
    26. return false;
    27. }
    28. }
    29. //其他情况,都是非法的
    30. else {
    31. return false;
    32. }
    33. }
    34. return numFlag;
    35. }
    36. }

  • 相关阅读:
    Linux 基础-文件及目录管理
    Cyanine5-N3细胞成像和显微镜CY5-N3/azide星戈瑞
    5.基于飞蛾扑火算法(MFO)优化的VMD参数(MFO-VMD)
    vscode使用内置插件断点调试vue2项目
    Unity实现设计模式——策略模式
    leecode #加一#二进制求和
    没钱,没人,没经验?传统制造型企业如何用无代码实现转型
    Centos 里面为什么有的磁盘命名/dev/vda 有的是/dev/sda ?
    如何通过AI视频智能分析技术,构建着装规范检测/工装穿戴检测系统?
    Redis 集群
  • 原文地址:https://blog.csdn.net/m0_70437378/article/details/134427633