算法第七周作业01
Description
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.
Solution
- 采用模擬法,考慮所有可能情況
- 考慮當出現特殊字符’e’(指數類型)時,其左邊是數值(包括小數),右邊也是數值(無小數點)
- 通過字符長度排除”.”, “+.”等情況,通過’e’出現位置排除”1e1e”,”e1e1”等情況,通過point, sign 排除重復出現’.’, ‘+’等情況
Code
// 是否出現了小數點boolean point = false;public boolean isNumber(String s) {// 去除空格s = s.trim();// 將e左右分離String[] split = s.split("e");if (split.length == 1 && !s.contains("e")) {// 不是指數類型,排除"e","e1","1e"等情況return isInvalidate(split[0], true);} else if (split.length == 2 && !s.startsWith("e") && !s.endsWith("e")) {// 是指數類型,排除"1e1e","e1e1"等情況return isInvalidate(split[0], true) && isInvalidate(split[1], false);}return false;}//left=true表示s是'e'的左邊數值(或者非指數類型),left=false表示s是指數部分private boolean isInvalidate(String s, boolean left) {// 是否出現了正負符號boolean sign = false;char c;if(s.length() == 0)return false;for(int i=0; i<s.length(); i++){c = s.charAt(i);if(left && c == '.' && point == false && (s.length() > 2 || s.length() > 1 && !sign)){// 指數部分無小數點,排除".","..","+."等情況point = true;} else if(i == 0 && (c == '+' || c == '-') && s.length() > 1){// 左邊數值和指數部分均可出現正負符號,排除"+","-"等情況sign = true;} else if(c < '0' || c > '9'){// 非以上字符的均為非法return false;}}return true;}總結
- 上一篇: Web_Dashboard开篇:如何在网
- 下一篇: 京东智能供应链平台应急场景实践