/* 65. Valid Number
 */

public class Solution {
  public boolean isNumber (String s) {
    boolean has_digit = false;
    boolean has_dot = false;
    boolean is_exponential = false;
    s = s.trim();
    if (s.length() == 0) return false;
    int i = 0, n = s.length();
    if (s.charAt(i) == '+' || s.charAt(i) == '-') {
      i++;
    }
    while (i < n) {
      if (Character.isDigit(s.charAt(i))) {
        has_digit = true;
      }
      else if (s.charAt(i) == '.' && has_dot == false) {
        has_dot = true;
      }
      else if (s.charAt(i) == 'e' && is_exponential == false) {
        is_exponential = true;
        i++;
        if (i < n &&)
      }
      else {
        return false;
      }
      i++;
    }
    if (has_digit == false) return false;
    return true;
  }
}
@@ -97,186 +97,170 @@
 ean 
-has_digit = false;%0A    boolean has_dot = false;%0A    boolean is_exponential = false;%0A    s = s.trim();%0A    if (s.length() == 0) return false;%0A    int i = 0, n = s.length();%0A    if
+is_number = false;%0A    int i = 0, n = s.length();%0A    while (i %3C n && Character.isWhitespace(s.charAt(i))) i++;%0A    // filter leading whitespaces%0A    if (i %3C n &&
  (s.
@@ -298,24 +298,17 @@
  == '-')
- %7B%0A     
+)
  i++;%0A  
@@ -305,25 +305,38 @@
 )) i++;%0A    
-%7D
+// filter sign
 %0A    while (
@@ -344,22 +344,12 @@
  %3C n
-) %7B%0A      if (
+ && 
 Char
@@ -388,19 +388,28 @@
     
-  has_digit
+i++;%0A      is_number
  = t
@@ -417,35 +417,35 @@
 ue;%0A    
-  
 %7D%0A    
-  else if (
+if (i %3C n && 
 s.charAt
@@ -458,31 +458,106 @@
  '.'
- && has_dot == false
+) %7B%0A      // the decimal point%0A      i++;%0A      while (i %3C n && Character.isDigit(s.charAt(i))
 ) %7B
+ 
 %0A   
@@ -565,92 +565,152 @@
     
-has_dot = true;%0A      %7D%0A      else if (s.charAt(i) == 'e' && is_exponential == false
+// every digit following the decimal point%0A        i++;%0A        is_number = true;%0A      %7D%0A    %7D%0A    if (is_number && i %3C n && s.charAt(i) == 'e'
 ) %7B%0A
@@ -715,21 +715,23 @@
 %7B%0A      
-  is_
+// the 
 exponent
@@ -734,26 +734,17 @@
 nential 
-= true;%0A  
+%0A
       i+
@@ -756,149 +756,296 @@
     
-  if (i %3C n &&)%0A      %7D%0A      else %7B%0A        return false;%0A      %7D%0A      i++;%0A    %7D%0A    if (has_digit == false) return false;%0A    return true
+is_number = false;%0A      if (i %3C n && (s.charAt(i) == '+' %7C%7C s.charAt(i) == '-')) i++;%0A      while (i %3C n && Character.isDigit(s.charAt(i))) %7B%0A        i++;%0A        is_number = true;%0A      %7D%0A    %7D%0A    while (i %3C n && Character.isWhitespace(s.charAt(i))) i++;%0A    return is_number && i == n
 ;%0A  

update 65