版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aFeiOnePiece/article/details/47448509
解题思路:
首先要明确什么样的是 valid number,题目中给出了如下例子
"0"
=>
true
" 0.1 "
=>
true
"abc"
=>
false
"1 a"
=>
false
"2e10"
=>
true
补充:
“2e” => false
“2e+” => false
“2e+6” => true
“1 1” => false
“ + “ => false
“ +5” => true
“ .1 “ => true
“ 1.” => true
那么,就可以把一个 valid number进行如下分解
1, prefix white space [ optional ]
2, + 或者- 号 [ optional ]
3, 整数 或者 小数
4, 幂 [ optional ] 如果存在’e’,那么’e'后面必须存在整数(可正可负)
5, postfix white space [ optional ]
前条件: i 用于遍历字符串s,isNumber 用于记录 part-3是否存在,
结束条件:如果 i 可以按照上述模式顺序遍历字符串s,并且 isNumber== true, 那么可以确定s是一个 valid number
public class Solution {
public boolean isNumber(String s) {
boolean isNumber = false;
int i = 0;
int n = s.length();
while(i < n && s.charAt(i) == ' ') i++;
if (i < n && ( s.charAt(i) == '+' || s.charAt(i) == '-' )) i++;
while(i < n && Character.isDigit(s.charAt(i))) {
i++;
isNumber = true;
}
if (i < n && s.charAt(i) == '.') {
i ++;
while(i < n && Character.isDigit(s.charAt(i))){
i++;
isNumber = true;
}
}
if ( isNumber && i < n && s.charAt(i) == 'e'){
i ++;
isNumber = false;
if (i < n && ( s.charAt(i) == '+' || s.charAt(i) == '-' )) i++;
while( i < n && Character.isDigit(s.charAt(i))){
i ++;
isNumber = true;
}
}
while( i < n && s.charAt(i) == ' ' ) i++;
return isNumber && i == n;
}
}