算法系列——Restore IP Addresses

来源:互联网 发布:西安朝阳软件培训中心 编辑:程序博客网 时间:2024/05/16 04:57

题目描述

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)

解题思路

一是只要遇到字符串的子序列或配准问题首先考虑动态规划DP,二是只要遇到需要求出所有可能情况首先考虑用递归。这道题并非是求字符串的子序列或配准问题,更符合第二种情况,所以我们要用递归来解。我们用k来表示当前还需要分的段数,如果k = 0,则表示三个点已经加入完成,四段已经形成,若这时字符串刚好为空,则将当前分好的结果保存。若k != 0, 则对于每一段,我们分别用一位,两位,三位来尝试,分别判断其合不合法,如果合法,则调用递归继续分剩下的字符串,最终和求出所有合法组合。

程序实现

public class Solution {    private List<String> result=new ArrayList<String>();    public List<String> restoreIpAddresses(String s) {        if(s==null||s.length()<4||s.length()>12)            return result;        restore(s,4,"");        return result;    }    private void restore(String s,int k,String out){        if(k==0&&s.isEmpty()){            result.add(out);            return;        }        for(int i=1;i<=3;i++){            if(s.length()>=i&&isValid(s.substring(0,i))){                if(k==1)                    restore(s.substring(i),k-1,out+s.substring(0,i));                else                     restore(s.substring(i),k-1,out+s.substring(0,i)+".");            }        }    }    private boolean isValid(String s){        if(s==null||s.isEmpty()||s.length()>3||(s.length()>1&&s.charAt(0)=='0'))            return false;        int res=Integer.valueOf(s);        return res<=255&&res>=0;    }}
原创粉丝点击