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

目录

题目地址:

我们直接看题解吧:

难度分析:

解题方法:

审题目+事例+提示:

解题思路:

代码实现:


题目地址:

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

难度:中等

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

我们直接看题解吧:

难度分析:

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

有效数字(表示数值的字符串),剑指offer,力扣_第1张图片

解题方法:

方法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、返回对应的布尔值

代码实现:

class Solution {
    public boolean isNumber(String s) {
        if (s == null || s.length() == 0) return false; //首先判断字符串是否为空           
        s = s.trim();//去掉字符串两端的空格
        boolean numFlag = false;
        boolean dotFlag = false;  //设置三个变量,初始化false
        boolean eFlag = false;
        for (int i = 0; i < s.length(); i++) {
            //判定是否为数字,则标记numFlag
            if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                numFlag = true;
            }
          //判定是否为.  需要没出现过.并且没出现过e
            else if (s.charAt(i) == '.' && !dotFlag && !eFlag) {
                dotFlag = true;
                
            } 
             //判定是否为e,需要没出现过e,并且出过数字了
            else if ((s.charAt(i) == 'e' || s.charAt(i) == 'E') && !eFlag && numFlag) {
                eFlag = true;
                numFlag = false;//为了避免123e这种情况,出现e之后就标志重置为false
             
            } 
           //判定为+-符号,只能出现在第一位或者紧接e后面
            else if ( (s.charAt(i) == '+' || s.charAt(i) == '-') {
                //+-出现在0位置或者e/E的后面第一个位置才是合法的
                if(i != 0 && str[i-1] != 'e' && str[i-1] != 'E'){
                    return false;
                }
            } 
           //其他情况,都是非法的
            else {
                return false;
            }
        }
        return numFlag;
    }
}

你可能感兴趣的:(#,字符串,剑指offer,算法,力扣)