Restore IP Addresses(恢复IP地址)

问题

Given a string containing only digits, restore it by returning all possible valid IP address combinations.

Have you met this question in a real interview? Yes
Example
Given "25525511135", return

[
"255.255.11.135",
"255.255.111.35"
]
Order does not matter.

分析

使用递归来暴力解决。请参阅 Combinations(组合)

代码


public class Solution {

    /*
     * @param s: the IP string
     * @return: All possible valid IP addresses
     */
    public List restoreIpAddresses(String s) {
        // write your code here
        List res = new ArrayList<>();
        tree(res, s, new ArrayList());
        return res;
    }

    private void tree(List res, String s, ArrayList integers) {
        if (integers.size() == 4) {
            if (s == null || s.length() == 0) {
                String src = "";
                for (int i = 0; i < integers.size(); i++) {
                    src += integers.get(i);
                    if (i != integers.size() - 1) {
                        src += ".";
                    }
                }
                if (!res.contains(src)) {
                    res.add(src);
                }
            }
            return;
        }
        if (s.startsWith("0")) {
            if (isValid(3-integers.size(), s.substring(1))) {
                integers.add(0);
                tree(res, s.substring(1), integers);
                integers.remove(integers.size() - 1);
            }
            return;
        }
        for (int i = 1; i <= s.length() && i <= 3; i++) {
            int key = Integer.parseInt(s.substring(0, i));
            String left = s.substring(i);
            if (key <= 255 && isValid(3 - integers.size(), left)) {
                integers.add(key);
                tree(res, left, integers);
                integers.remove(integers.size() - 1);
            }

        }
    }

    private boolean isValid(int i, String left) {
        if (left.length() >= i && left.length() <= i * 3) {
            return true;
        }
        return false;
    }
}

你可能感兴趣的:(Restore IP Addresses(恢复IP地址))