Skip to content

Latest commit

 

History

History
92 lines (78 loc) · 2.36 KB

65. Valid Number.md

File metadata and controls

92 lines (78 loc) · 2.36 KB

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"
  • Positive/negative sign - "+"/"-"
  • Decimal point - "."
  • Of course, the context of these characters also matters in the input.

Update (2015-02-10):

The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.


Solution

  • mine

    • Java

      Error Answer, 1477 / 1481 test cases passed. ???

      public boolean isNumber(String s) {
          try{
              Double.parseDouble(s);
              return true;
          }catch(Exception e){
              return false;
          }
      }
      
  • the most votes

    Runtime: 2 ms, faster than 90.91%,Memory Usage: 39.6 MB, less than 6.25% of Java online submissions

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