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.

[分析] 体会有限状态机思想的好题,详细分析参考[url]http://blog.youkuaiyun.com/suwei19870312/article/details/12094233[/url]
精简的代码真是赏心悦目~


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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值