【LeetCode】65. Valid Number

Difficulty: Hard

 More:【目录】LeetCode Java实现

Description

Validate if a given string can be interpreted as a decimal number.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3   " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:

  • Numbers 0-9
  • Exponent - "e" or "E"
  • Positive/negative sign - "+"/"-"
  • Decimal point - "."

Of course, the context of these characters also matters in the input.

Intuition

Method1: A valid number is in the form of A.B e/E A (A: integer, B: unsigned integer), so it is helpful to break the problem down to several components that can be solved individually. Detailed solution refer to: 表示数值的字符串

 Method2: Use some flags(eSeen, pointSeen, isNum) while scan each character in the String. The solution is shown below.

Solution

    public boolean isNumber(String s) {
        if(s==null || s.length()<=0)
            return false;
        s=s.trim();
        boolean isNum=false;
        boolean pointSeen=false;
        boolean eSeen=false;
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='+'||s.charAt(i)=='-'){
                if(i!=0 && s.charAt(i-1)!='e' && s.charAt(i-1)!='E')
                    return false;
            }else if(Character.isDigit(s.charAt(i))){
                    isNum=true;
            }else if(s.charAt(i)=='.'){
                if(eSeen || pointSeen)
                    return false;
                pointSeen=true;
            }else if(s.charAt(i)=='e' || s.charAt(i)=='E' ){
                if(eSeen || !isNum)
                    return false;
                eSeen=true;
                isNum=false;
            }else
                return false;
        }
        return isNum;
    }

  

Complexity

Time complexity : O(n)

Space complexity :  O(1)

What I've learned

1. Ought to make the best of flags. Learn to use flags well.

 

 More:【目录】LeetCode Java实现

 

posted @ 2018-12-04 22:02  华仔要长胖  阅读(586)  评论(0编辑  收藏  举报