1、前言
题目描述2、思路
使用 DFA,定义9个状态。
状态图状态转换图
3、代码
class Solution {
public boolean isNumber(String s) {
if(s == null || s.length() == 0){
return false;
}
int[][] transTable = {
{1,2,7,-1,-1,0},
{-1,2,7,-1,-1,-1},
{-1,2,3,4,-1,9},
{-1,3,-1,4,-1,9},
{6,5,-1,-1,-1,-1},
{-1,5,-1,-1,-1,9},
{-1,5,-1,-1,-1,-1},
{-1,8,-1,-1,-1,-1},
{-1,8,-1,4,-1,9},
{-1,-1,-1,-1,-1,9}
};
Map<String, Integer> cols = new HashMap<>();
cols.put("sign", 0);
cols.put("number", 1);
cols.put(".", 2);
cols.put("exp", 3);
cols.put("other", 4);
cols.put("blank", 5);
List<Integer> legalState = new ArrayList<>();
legalState.add(2);
legalState.add(3);
legalState.add(5);
legalState.add(8);
legalState.add(9);
int state = 0;
for (char c : s.toCharArray()) {
state = transTable[state][cols.get(this.getCol(c))];
if(state == -1)
return false;
}
return legalState.contains(state);
}
public String getCol(char c){
if (c == '+'|| c == '-') return "sign";
if (c >= '0'&& c <= '9') return "number";
if (c == '.') return ".";
if (c == 'E'||c == 'e') return "exp";
if (c ==' ') return "blank";
return "other";
}
}
网友评论