Thinking process

simple process

Mistakes

what's the exist?

corner cases

  • "010010"
public class Solution {
    private static final int MAX_NUM = 255;
    private static final int MIN_NUM = 0;
    private static final int  MAX_LENGTH = 3;

    public List<String> restoreIpAddresses(String s) {
        List<String> result = new ArrayList<>();

        dfsHelper(s, result, new ArrayList<>(), 0, 4);

        return result;
    }

    private void dfsHelper(String s, List<String> result, List<String> list, int start, int depth) {
        //exit

        if (depth < 1 && start >= s.length()) {
            StringBuilder sb = new StringBuilder();
            for (String str : list){
                if (sb.length() != 0) sb.append('.');
                sb.append(str);
            }

            result.add(sb.toString());
            return;
        }

        if (depth < 1 || start >= s.length()) return;

        for (int end = start + 1; end <= start + MAX_LENGTH; ++end) {
            if (end > s.length()) break;
            String subStr = s.substring(start, end);
            if (isValid(subStr)) {
                list.add(subStr);
                dfsHelper(s, result, list, end, depth - 1);
                list.remove(list.size() - 1);
            }
        }
    }

    private boolean isValid(String str) {
        if (str.length() < 1) return false;
        if (str.length() > 1 && str.charAt(0) == '0') return false;

        return Integer.valueOf(str) <= MAX_NUM && Integer.valueOf(str) >= MIN_NUM;
    }
}

results matching ""

    No results matching ""