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)
给一个字符串,转成可能组成的IP数
public class Solution { //深度优先遍历,DFS即可实现 List<String> res=new ArrayList<String>(); public List<String> restoreIpAddresses(String s) { //特殊情况处理 if(s==null || s.length()<=0 || s.length()<4 || s.length()>12) return res; String one=""; byDFS(s,0,0,one); return res; } //index 记录开始的位置,k记录截取的数量, void byDFS(String s, int index,int k,String one) { if(k==3) { String tmp = s.substring(index, s.length()); if(check(tmp)) res.add(one+tmp); return ; }else { //每一次最长的截取长度是i,最短1位,最长3位 for(int i=1;i<=3 && index+i < s.length() ;i++) { String tmp = s.substring(index, index+i); if(check(tmp)) byDFS(s, index+i, k+1, one+tmp+"."); } } } public boolean check(String ip) { //以0开始的字符串,只有0是合理的,其余的比如001等等都不是合理的 if(ip.charAt(0)==‘0‘) { if(ip.equals("0")) return true; else return false; }else { int ipNum=Integer.parseInt(ip); if(ipNum>0 && ipNum<=255) return true; else return false; } } }
哎,映客线下笔试题。好难哦。虽然想到是回溯,但是没做出来,没想到是LT原题。gg。
LeetCode 93 Restore IP Addresses
原文地址:http://fulin0532.blog.51cto.com/6233825/1971550