LeetCode 93 Restore IP Addresses
Description
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)
Solution
- 問題是要把一段字符串轉換成可能的ip地址
- 定義返回變量solutions
- 傳入restoreIp函數中
- restoreIp 函數有四個參數原始的ip字符串、 返回結果solutions、idx(當前ip的索引)、restored、count(用來記錄切割的ip段, ip總共四段)
- count > 4 就返回
- count == 4 && idx == ip的長度,意味著完成了ip地址的轉換,并將存儲的變量restored 加入到 solutions中
- 進行for循環 i = 1 2 3
如果idx+i > ip.length() 跳出循環
s = ip.substring(idx, idx+i)
s以0開始而且長度大于1 || i = 3&&s>256 跳過下一條語句
遞歸調用restoreIp(ip, solutions, idx移動i, restored + s + (count == 3 ? "" : "."), count +1);
Code
public class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> solutions = new ArrayList<>();
restoreIp(s, solutions, 0, "", 0);
return solutions;
}
private void restoreIp(String ip, List<String> solutions, int idx, String restored, int count) {
if(count > 4) return;
if(count == 4 && idx == ip.length()) {
solutions.add(restored);
}
for(int i = 1; i < 4; i++) {
if(idx + i > ip.length()) break;
String s = ip.substring(idx, idx+i);
if ((s.startsWith("0") && s.length() > 1) || (i == 3 && Integer.parseInt(s) >= 256))
continue;
restoreIp(ip, solutions, idx+i, restored+s+(count == 3 ? "" : "."), count+1);
}
}
}