Leecode刷题之路第八天之字符串转换整数

Scroll Down

题目出处

08-字符串转换整数

题目描述

08-字符串转换整数-题目描述1
08-字符串转换整数-题目描述2
08-字符串转换整数-题目描述3
08-字符串转换整数-题目描述4

个人解法

思路:

todo

代码示例:(Java)

todo

复杂度分析

todo

官方解法

字符串转换整数-官方题解

方法1:自动机

思路:

字符串转转整数-自动机解法
字符串转转整数-自动机解法1

代码示例:(Java)

public class Solution1 {
    public int myAtoi(String str) {
        Automaton automaton = new Automaton();
        int length = str.length();
        for (int i = 0; i < length; ++i) {
            automaton.get(str.charAt(i));
        }
        return (int) (automaton.sign * automaton.ans);
    }
}

class Automaton {
    public int sign = 1;
    public long ans = 0;
    private String state = "start";
    private Map<String, String[]> table = new HashMap<String, String[]>() {{
        put("start", new String[]{"start", "signed", "in_number", "end"});
        put("signed", new String[]{"end", "end", "in_number", "end"});
        put("in_number", new String[]{"end", "end", "in_number", "end"});
        put("end", new String[]{"end", "end", "end", "end"});
    }};

    public void get(char c) {
        state = table.get(state)[get_col(c)];
        if ("in_number".equals(state)) {
            ans = ans * 10 + c - '0';
            ans = sign == 1 ? Math.min(ans, (long) Integer.MAX_VALUE) : Math.min(ans, -(long) Integer.MIN_VALUE);
        } else if ("signed".equals(state)) {
            sign = c == '+' ? 1 : -1;
        }
    }

    private int get_col(char c) {
        if (c == ' ') {
            return 0;
        }
        if (c == '+' || c == '-') {
            return 1;
        }
        if (Character.isDigit(c)) {
            return 2;
        }
        return 3;
    }
}

复杂度分析

字符串转整数-复杂度分析

考察知识点

收获

1.atoi函数:(表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中
atoi

Gitee源码位置

08-字符串转换整数-源码

同名文章,已同步发表于CSDN,个人网站,公众号