[leetcode] restore IP address

来源:互联网 发布:飞利浦电动牙刷知乎 编辑:程序博客网 时间:2024/05/07 20:27

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

For example:
Given "25525511135",

return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

思路:经典dfs题目,回溯法,用ArrayList path来存储已存的字段,当path.size() == 4时,存入result,判断过程中,一个字符或者两个字符直接接受,因为必然在0~255之间,三个字符需要判断,此外第一个字符不能是0,除非是一个字符。根据以上条件,写isValid判断函数。DFS过程中,每个节点有三个可能分支,一个字符,两个字符,三个字符,所以是结束条件是i <= pos+3 && i <s.length()。

public class Solution {    public void dfs(ArrayList<String> result, ArrayList<String> path, int pos, String s){        if(path.size() == 4){            if(pos != s.length())                return;            StringBuilder sb = new StringBuilder();            for(String tmp : path){                sb.append(tmp);                sb.append(".");            }            sb.deleteCharAt(sb.length() - 1);            String a = sb.toString();            result.add(a);        }        for(int i = pos; i <= pos + 3 && i < s.length(); i++){            String sub = s.substring(pos, i+1);            if(isValid(sub)){                path.add(sub);                dfs(result, path, i+1, s);                path.remove(path.size() - 1);            }        }    }    public ArrayList<String> restoreIpAddresses(String s) {        ArrayList<String> result = new ArrayList<String>();        ArrayList<String> path = new ArrayList<String>();        if(s.length() < 4 || s.length() > 12){            return result;        }        dfs(result, path, 0, s);        return result;    }        public boolean isValid(String s){        if(s.charAt(0) == '0')            return s.equals("0");        int num = Integer.parseInt(s);        return num >= 0 && num <= 255;    }}


0 0
原创粉丝点击