首页 > 代码库 > [leetcode]Valid Number
[leetcode]Valid Number
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.
算法思路:
排除法:遇到所有非法情况则返回false,扫描完之后返回true
非法情况:
符号:+、-最多只能出现两次,而且第二次必须出现在e/E后面。而且第一个+/-号之前必须没有数字,第二个比如紧接在e后面,而且后面必须有数字;
e:最多只能出现一次。而且前后必须有数字;
. : 最多只能出现一次,而且不能出现在e后面,.如果在字符串最后一位时,前面必须要有数字;
【提交出错后补充】第一次提交的时候,“e”报错,边界情况没有考虑真是不应该
总之这种题,不难,但是繁琐:
给出我出错的case,希望大家借鉴:(好多啊,囧)
005047e+6 true
3. true
.1 true
-. false
6+1 false
. 1 false
0e false
代码如下:
1 public class Solution { 2 public boolean isNumber(String s) { 3 if(s == null || s.trim().length() == 0) return false; 4 s = s.trim(); 5 char[] charArray = {‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘.‘,‘e‘,‘E‘,‘+‘,‘-‘}; 6 Set<Character> set = new HashSet<Character>(); 7 for(char c : charArray){ 8 set.add(c); 9 }10 boolean hasE = false, hasPoint = false, hasNum = false;11 int operaterCount = 0;12 for(int i = 0; i < s.length(); i++){13 if(!set.contains(s.charAt(i))) return false;14 if(s.charAt(i) <= ‘9‘ && s.charAt(i) >= ‘0‘) hasNum = true;15 if(s.charAt(i) == ‘E‘ || s.charAt(i) == ‘e‘){16 if(i == 0 || i == s.length() - 1) return false;17 if(!hasE && hasNum) hasE = true;18 else return false;19 }20 if(s.charAt(i) == ‘.‘){21 if(i == 0 && 1 == s.length()) return false;22 if(i == s.length() - 1 && !hasNum) return false;23 if(!hasPoint && !hasE) hasPoint = true;24 else return false;25 }26 if(s.charAt(i) == ‘-‘ || s.charAt(i) == ‘+‘){27 if(i == s.length() - 1 || (i != 0 && s.charAt(i - 1) != ‘e‘ && s.charAt(i - 1) != ‘E‘)) return false;28 if(operaterCount == 2) return false;29 if(operaterCount == 1 && !hasE && !hasNum) return false;30 operaterCount++;31 }32 }33 return true;34 }35 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。