Last active
May 5, 2017 20:05
-
-
Save wayetan/9142238 to your computer and use it in GitHub Desktop.
Valid Number
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * 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. | |
| */ | |
| public class Solution { | |
| public boolean isNumber(String s) { | |
| if(s == null || s.length() == 0) | |
| return false; | |
| int start = 0; | |
| // handle the space at the front | |
| while(start < s.length() && s.charAt(start) == ' ') | |
| start++; | |
| if(start == s.length()) | |
| return false; | |
| if(s.charAt(start) == '+' || s.charAt(start) == '-') | |
| start++; | |
| boolean hasExp = false; | |
| boolean hasNum = false; | |
| boolean hasDot = false; | |
| while(start < s.length()) { | |
| char c = s.charAt(start); | |
| // handle the space in the end | |
| if(c == ' ') { | |
| while(start < s.length() && s.charAt(start) == ' ') | |
| start++; | |
| if(start == s.length()) | |
| break; | |
| return false; | |
| } else if (c >= '0' && c <= '9') { | |
| hasNum = true; | |
| } else if(c == '+' || c == '-') { | |
| if(s.charAt(start - 1) != 'e') | |
| return false; | |
| } else if(c == 'e') { | |
| if(hasExp || !hasNum) | |
| return false; | |
| hasExp = true; | |
| hasNum = false; | |
| } else if(c == '.') { | |
| if(hasExp || hasDot) | |
| return false; | |
| hasDot = true; | |
| } else | |
| return false; | |
| start++; | |
| } | |
| return hasNum; | |
| } | |
| public static boolean isNumberII(String s){ | |
| s = s.trim(); | |
| if (s.length() == 0) return false; | |
| int k = 0; | |
| if (s.charAt(0) == '+' || s.charAt(0) == '-'){ | |
| k++; | |
| } | |
| boolean num = false, dot = false, exp = false; | |
| while (k < s.length()){ | |
| char ch = s.charAt(k); | |
| if (ch >= '0' && ch <= '9'){ | |
| num = true; | |
| } else if(ch == '.'){ | |
| if (exp || dot) return false; | |
| dot = true; | |
| }else if (ch == 'e' || ch == 'E'){ | |
| if (exp || !num) return false; | |
| exp = true; | |
| num = false; | |
| }else if (ch == '+' || ch == '-'){ | |
| if (s.charAt(k-1) != 'e' && s.charAt(k-1)!= 'E'){ | |
| return false; | |
| } | |
| }else{ | |
| return false; | |
| } | |
| k++; | |
| } | |
| return num; | |
| } | |
| //5. Valid Number, no 'e' | |
| public boolean isNumber(String s){ | |
| if(s==null || s.isEmpty()) return false; | |
| s=s.trim(); | |
| if(s.length()>1 && (s.charAt(0)=='+' || s.charAt(0)=='-')) s=s.substring(1); | |
| if(s.length()==1 && !Character.isDigit(s.charAt(0))) return false; | |
| boolean decimal=false; | |
| for(char c : s.toCharArray()){ | |
| if(!('0'<=c && c<='9')){ | |
| if(c=='.' && !decimal) decimal=true; | |
| else return false; | |
| } | |
| } | |
| return true; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment