首页 > 代码库 > Leetcode-Valid Number
Leetcode-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.
Analysis:
The key point is to clarify which case is valid. I used a recursive method with several control switches. With such method, it is easy for us to definite different rules of feasibility.
Solution:
1 public class Solution { 2 public boolean isNumber(String s) { 3 s = s.trim(); 4 //check whether there is ‘e‘. 5 int index = s.indexOf("e"); 6 7 if (index!=-1){ 8 String left = s.substring(0,index); 9 String right = s.substring(index+1,s.length());10 if (isNumberRecur(left,true,true,true,false)&&isNumberRecur(right,false,true,true,false))11 return true;12 else return false;13 } else14 if (isNumberRecur(s,true,true,true,false)) return true;15 else return false;16 17 }18 19 public boolean isNumberRecur(String s, boolean canBeDouble, boolean canHaveSymbol, boolean canZeroHead, boolean canBeNull){20 if (!canBeNull && s.isEmpty()) return false;21 if (canBeNull && s.isEmpty()) return true;22 int index;23 24 //NOTE: check symbol before checking float!25 //check positive symbol26 index = s.indexOf("+");27 if (index!=-1 && !canHaveSymbol) return false;28 if (canHaveSymbol && index!=-1 && index!=0) return false;29 if (canHaveSymbol && index==0)30 return isNumberRecur(s.substring(1,s.length()),true,false,true,false);31 32 //check negative symbol33 index = s.indexOf("-");34 if (index!=-1 && !canHaveSymbol) return false;35 if (canHaveSymbol && index!=-1 && index!=0) return false;36 if (canHaveSymbol && index==0)37 return isNumberRecur(s.substring(1,s.length()),true,false,true,false);38 39 index = s.indexOf(".");40 if (canBeDouble && index!=-1){ 41 String left = s.substring(0,index);42 String right = s.substring(index+1,s.length());43 44 //NOTE: this code is only for the case "3." to be true in leetcode while "." is invalid.45 if (left.isEmpty() && right.isEmpty()) return false;46 if (isNumberRecur(left,false,true,true,true) && isNumberRecur(right,false,false,true,true))47 return true;48 else return false;49 }50 51 if (!canBeDouble && index!=-1) return false;52 53 //check zero head.54 if (!canZeroHead && s.charAt(0)==‘0‘ && s.length()>1) return false;55 56 //check whether all chars are numbers.57 for (int i=0;i<s.length();i++)58 if (s.charAt(i)<‘0‘ || s.charAt(i)>‘9‘) return false;59 60 return true;61 }62 63 }
Leetcode-Valid Number
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。