Leecode.2020.4.3字符串转换整数 (atoi)
思路为DFA,设置一个map来规定判断字符串中某一个字符后的结果状态变化:
直接将该表用代码实现即可解决
`public class Solution {
int standrand_table[][] = {
{0,1,2,3},
{3,3,2,3},
{3,3,2,3},
{3,3,3,3},
};
public int myAtoi(String str) {
char[] chars = str.toCharArray();
int flag1 = 0 , flag2 = -1;
StringBuilder string = new StringBuilder();
for(char c :chars){
flag2 = determine(c);
flag1 = standrand_table[flag1][flag2];
if(flag1 == 2 || flag1 == 1){
string.append(c);
}
}
if(string.length() == 0 || (string.length()==1&&(string.charAt(0) == '+' || string.charAt(0) == '-'))) return 0;
try{
return Math.min(Math.max(Integer.parseInt(string.toString()), Integer.MIN_VALUE),Integer.MAX_VALUE);
}
catch(Exception e){
if(string.charAt(0) == '-')
return Integer.MIN_VALUE;
return Integer.MAX_VALUE;
}
}
private int determine(char c){
if(c == ' ') return 0;
if(c == '+' || c == '-') return 1;
if(isInt(c)) return 2;
return 3;
}
private boolean isInt(char c){
try {
int a = Integer.parseInt(String.valueOf(c));
return true;
}catch (Exception e){
return false;
}
}
}
`