LeetCode 65有效数字

有效数字这一题可以使用模拟的方式来解决,有效易懂。

class Solution {
        /*借鉴了题解区三叶姐的模拟思路 非常清晰易懂
        将字符串以 e/E 进行分割后,其实规则十分简单:

        如果存在 e/E :左侧可以「整数」或「浮点数」,右侧必须是「整数」
        如果不存在 e/E :整段可以是「整数」或「浮点数」
        关键在于如何实现一个 check 函数用于判断「整数」或「浮点数」:

        +/- 只能出现在头部
        . 最多出现一次
        至少存在一个数字 */
    public boolean isNumber(String s) {
        char[] num=s.toCharArray();
        int indexE=-1;
        for(int i=0;i<num.length;i++){
            //有字母e/E且第一次出现
            if((num[i]=='e'||num[i]=='E')&&(indexE==-1))
                indexE=i;
            //有字母e/E且不是第一次出现
            else if((num[i]=='e'||num[i]=='E')&&(indexE==-1))
                return false;
            //没有字母e不做处理 留到后面判断整数或者小数即可
        }
        //整个字符串没有字母e/E
        if(indexE==-1)
            return check(num,0,num.length-1,false);
        boolean ansLeft=true,ansRight=true;
        if(indexE!=-1){
            ansLeft=check(num,0,indexE-1,false);
            ansRight=check(num,indexE+1,num.length-1,true);
        }
        return ansLeft&ansRight;
    }

    //type:true 必须为整数 false 整数小数均可
    public boolean check(char[] nums,int start,int end,boolean type){
        boolean haveDot=false;
        boolean haveNum=false;
        if(end<start)return false;
        if(nums[start]=='+'||nums[start]=='-') start++;
        for(int i=start;i<=end;i++){
            if(nums[i]=='.'){
                if(type||haveDot) return false;
                haveDot=true;
            }
            //是数字
            else if(nums[i]>='0'&&nums[i]<='9')
                haveNum=true;
            //是其他字母
            else
                return false;
        }
        return haveNum;
    }
}```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值