【leetcode】Restore IP Addresses

Restore IP Addresses

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)

 
 
利用回溯法,注意几种情况:
0.0.0.0是合法的
01.1.1.1是不合法的
“10000”只能拆成10.0.0.0
 
 
 1 class Solution {
 2 public:
 3     vector<string> restoreIpAddresses(string s) {
 4        
 5         vector<string> result;
 6         string tmp="";
 7         bt(s,result);
 8         return result;
 9        
10     }
11    
12     void bt(string s,vector<string> &result,int start=0,string tmp="",int left=5)
13     {
14         left--;
15         int n=s.length();
16        
17         //找到的条件
18         if(left==0&&start==n)
19         {
20             //去除最后一个点
21             tmp.pop_back();
22             result.push_back(tmp);
23             return;
24         }
25        
26         //停止条件
27         if(left==0||(n-start)/left>3||(n-start)/left==0||start>n)
28         {
29             return;
30         }
31  
32        
33         string tmpStr;
34         if(n-start>=1)
35         {
36             tmpStr=tmp;
37             string str1=s.substr(start,1);
38             tmp+=str1;
39             bt(s,result,start+1,tmp+".",left);
40             tmp=tmpStr;
41         }
42        
43         if(n-start>=2&&s[start]!='0')
44         {
45             tmpStr=tmp;
46             string str2=s.substr(start,2);
47             tmp+=str2;
48             bt(s,result,start+2,tmp+".",left);
49             tmp=tmpStr;
50         }
51        
52         if(n-start>=3&&s[start]!='0')
53         {
54             tmpStr=tmp;
55             string str3=s.substr(start,3);
56             int n = atoi(str3.c_str());
57            
58             if(n<=255)
59             {
60                 tmp+=str3;
61                 bt(s,result,start+3,tmp+".",left);
62                 tmp=tmpStr;
63             }
64         }
65        
66     }
67 };
 
 
原文地址:https://www.cnblogs.com/reachteam/p/4199266.html