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.
[分析] 体会有限状态机思想的好题,详细分析参考 http://blog.csdn.net/suwei19870312/article/details/12094233
精简的代码真是赏心悦目~
public class Solution { private enum InputEnum { invalid, space, sign, digit, dot, exponent } private int[][] transitionTable = { {-1, 0, 3, 1, 2, -1}, {-1, 8, -1, 1, 4, 5}, {-1, -1, -1, 4, -1, -1}, // only accept digits {-1, -1, -1, 1, 2, -1}, // similar as state 1, but cann't accept sign & space {-1, 8, -1, 4, -1, 5}, {-1, -1, 6, 7, -1, -1}, {-1, -1, -1, 7, -1, -1}, {-1, 8, -1, 7, -1, -1}, {-1, 8, -1, -1, -1, -1} }; public boolean isNumber(String s) { if (s == null || s.length() == 0) return false; int state = 0; for (int i = 0; i < s.length(); i++) { int inputType = InputEnum.invalid.ordinal(); char curr = s.charAt(i); if (curr == ' ') inputType = InputEnum.space.ordinal(); else if (curr == '+' || curr == '-') inputType = InputEnum.sign.ordinal(); else if (curr >= '0' && curr <= '9') inputType = InputEnum.digit.ordinal(); else if (curr == '.') inputType = InputEnum.dot.ordinal(); else if (curr == 'e' || curr == 'E') inputType = InputEnum.exponent.ordinal(); state = transitionTable[state][inputType]; if (state == -1) return false; } return state == 1 || state == 4 || state == 7 || state == 8; } }