LeetCode Online Judge 题目C# 练习 - 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)

 1         public static List<string> ResotreIPAddress(string s)
 2         {
 3             if (s.Length < 4 || s.Length > 12)
 4                 return null;
 5 
 6             List<string> ret = new List<string>();
 7 
 8             int n = s.Length - 1;
 9             int i = 0;
10             for (int j = i + 1; j <= n - 2; j++)
11             {
12                 for (int k = j + 1; k <= n - 1; k++)
13                 {
14                     for (int l = k + 1; l <= n; l++)
15                     {
16                         string a = s.Substring(i, j - i), b = s.Substring(j, k - j), c = s.Substring(k, l - k), d = s.Substring(l);
17                         if (RestoreIPAddressIsValid(a, b, c, d))
18                             ret.Add(a + "." + b + "." + c + "." + d);
19                     }
20                 }
21             }
22 
23             return ret;
24         }
25 
26         public static bool RestoreIPAddressIsValid(string a, string b, string c, string d)
27         {
28             // check length for each block
29             if (!(a.Length < 4 && b.Length < 4 && c.Length < 4 && d.Length < 4))
30                 return false;
31             // check if each block length == 1 or NOT begin with 0
32             if (!((a.Length == 1 || a[0] != '0') && (b.Length == 1 || b[0] != '0') && (c.Length == 1 || c[0] != '0') && (d.Length == 1 || d[0] != '0')))
33                 return false;
34 
35             int aVal = int.Parse(a), bVal = int.Parse(b), cVal = int.Parse(c), dVal = int.Parse(d);
36 
37             // check if each block's value is valid
38             if (aVal > 255 || bVal > 255 || cVal > 255 || dVal > 255)
39                 return false;
40 
41             return true;
42         }

代码分析:

  BF,但是可以过LeetCode 的 Online Judge. 不知道有没有更好的方法。 这一题的跟之后的 Sudoku Solver 思路相似,穷举所有答案,然后用一个isValid方法筛选。

posted @ 2012-10-15 23:07  ETCOW  阅读(263)  评论(0编辑  收藏  举报