[LeetCode]Valid Number

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aFeiOnePiece/article/details/47448509
解题思路:
首先要明确什么样的是 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;

    }
}


猜你喜欢

转载自blog.csdn.net/aFeiOnePiece/article/details/47448509