93. 复原IP地址(dfs+回溯)

176 阅读1分钟

class Solution {
    List<String> ans = new ArrayList<>();
    public List<String> restoreIpAddresses(String s) {
        dfs(s, 0, 0, new StringBuilder());
        return ans;
    }

    private void dfs(String s, int start, int count, StringBuilder path) {
        if (start == s.length()) {
            if (count == 4) {
                ans.add(path.substring(1));
            }
            return;
        }
        if (count > 4) {
            return;
        }
        if (s.charAt(start) == '0') {
            int len = path.length();
            dfs(s, start + 1, count + 1, path.append(".0"));
            path.delete(len, path.length());

        } else {
            for (int i = start, t = 0; i < s.length(); i++) {
                t = t * 10 + s.charAt(i) - '0';
                if (t < 256) {
                    int len = path.length();
                    dfs(s, i + 1, count + 1, path.append(".").append(t));
                    path.delete(len, path.length());
                } else {
                    break;
                }
            }
        }
    }
}