65. Valid Number

Validate if a given string is numeric.

Some examples:
"0"=>true
" 0.1 "=>true
"abc"=>false
"1 a"=>false
"2e10"=>true

Note:It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

Update (2015-02-10):
The signature of theC++function had been updated. If you still see your function signature accepts aconst char *argument, please click the reload buttonto reset your code definition.

tag: pattern

class Solution {
    public boolean isNumber(String s) {
        if (s == null || s.length() == 0) return false;
        s = s.trim();

        // '.' has to after number, cannot have '.' or 'e' before
        // 'e' has to after number, cannot have e before
        // +/- can only be in the beginning or after e
        boolean seenDot = false;
        boolean seenNumber = false;
        boolean seenE = false;
        boolean numberAfterE = false;
        for (int i = 0; i < s.length(); i++){
            if (s.charAt(i) >= '0' && s.charAt(i) <= '9'){
                numberAfterE = true;
                seenNumber = true;
            }
            else if (s.charAt(i) == '.'){
                if (seenDot || seenE){
                    return false;
                }
                seenDot = true;
            }
            else if (s.charAt(i) == 'e'){
                if (seenE || !seenNumber){
                    return false;
                }
                seenE = true;
                numberAfterE = false;
            }
            else if (s.charAt(i) == '+' || s.charAt(i) == '-'){
                if (i != 0 && s.charAt(i - 1) != 'e'){
                    return false;
                }
            }
            else{
                return false;
            }
        }

        return seenNumber && numberAfterE;
    }
}

results for ""

    No results matching ""