[LeetCode]Valid Number

本文详细阐述了如何通过特定的解题思路判断一个字符串是否为有效数字,并提供了相应的Java代码实现。通过将有效数字分解为五个部分,该算法能够准确识别合法的数字格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:
首先要明确什么样的是 valid number,题目中给出了如下例子
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
补充:
“2e” => false
“2e+” => false
“2e+6” => true
“1 1” => false
“   + “ => false
“  +5” => true
“  .1 “ => true
“  1.”  => true

那么,就可以把一个 valid number进行如下分解
1, prefix white space [ optional ]
2, + 或者- 号 [ optional ] 
3, 整数 或者 小数
4, 幂 [ optional ] 如果存在’e’,那么’e'后面必须存在整数(可正可负)
5, postfix white space [ optional ]

前条件:  i 用于遍历字符串s,isNumber 用于记录 part-3是否存在,
结束条件:如果 i 可以按照上述模式顺序遍历字符串s,并且 isNumber== true, 那么可以确定s是一个 valid number 


public class Solution {
    public boolean isNumber(String s) {
        boolean isNumber = false;
        int i = 0;
        int n = s.length();

        while(i < n && s.charAt(i) == ' ') i++;
        if (i < n && ( s.charAt(i) == '+' || s.charAt(i) == '-' )) i++;

        while(i < n && Character.isDigit(s.charAt(i))) {
            i++;
            isNumber = true;
        }
        if (i < n && s.charAt(i) == '.') {
            i ++;
            while(i < n && Character.isDigit(s.charAt(i))){
                i++;
                isNumber = true;
            }
        }

        if ( isNumber && i < n && s.charAt(i) == 'e'){
            i ++;
            isNumber = false;
            if (i < n &&  ( s.charAt(i) == '+' || s.charAt(i) == '-' )) i++;
            while( i < n && Character.isDigit(s.charAt(i))){
                i ++;
                isNumber = true;
            } 
        }

        while( i < n && s.charAt(i) == ' ' ) i++;

        return isNumber && i == n;

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值