其他分享
首页 > 其他分享> > 剑指Offer打卡day37——AcWing 31. 表示数值的字符串

剑指Offer打卡day37——AcWing 31. 表示数值的字符串

作者:互联网

【题目描述】
在这里插入图片描述

AcWing 31. 表示数值的字符串

【思路】

模拟

/**
合法的情况很多 判掉不合法的
遍历字符串 如果当前字符是
1. 数字,pass什么也不做
2. 是'.', 点数大于1了 或者 点后则return false
3. 是'e'或者'E'  个数大于1 或者e前面有点了 或者e在头或者尾 则return false
 */
class Solution {
    public boolean isNumber(String s) {
        
        //去除s前后的空格
        s = s.trim();
        //如果为空字符        
        if( s.equals("") )  return false;
        //去除 正负号
        if( s.charAt(0) == '+' || s.charAt(0) =='-') s = s.substring(1);
        char  c[] = s.toCharArray();
        
        int n = c.length;
        if( n == 0 || c[0] == '.'  && n == 1) return false;  // +.  -.
        int dot = 0, e = 0;
        for(int i = 0; i < n; i ++){
            if( c[i] >= '0' && c[i] <= '9' );
            else if( c[i] == '-' || c[i] == '+') return false; //出现超过一个正(负)号
            else if( c[i] == '.'){
                dot ++;
                if( dot > 1 || e > 0) return false;  //12.45.8  1E2.3
            }else if( c[i] == 'e' || c[i] == 'E'){
                e ++;
                if( i == 0 || i == n - 1 || e > 1 || i == 1 && c[0] =='.' )//e12  123e   23e54e  .e44316
                    return false;
                //e后面有带符号的数字
                if( c[i + 1] == '+' || c[i + 1] == '-' ){
                    if( i + 2 == n ) return false; // 154e+
                    i ++; // 跳过加号
                }
            }else //其他非法字符直接返回false 
                return false;
            
        }
        return true;
    }
}

标签:return,Offer,++,day37,int,&&,false,打卡,dot
来源: https://blog.csdn.net/weixin_44855907/article/details/116886980