链接:https://www.nowcoder.com/questionTerminal/ce73540d47374dbe85b3125f57727e1e
来源:牛客网
现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。
例如:
给出的字符串为"25525522135",
返回[“255.255.22.135”, “255.255.221.35”]. (顺序没有关系)
示例1
输入
“25525522135”
输出
[“255.255.22.135”,“255.255.221.35”]
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return string字符串ArrayList
*/
ArrayList<String> res = new ArrayList<>();
public ArrayList<String> restoreIpAddresses (String s) {
// write code here
//start代表从第start个位置插小数点,count代表还剩几个小数点可以插
int start = 0, count = 3;
backtrack(s, start, count);
return res;
}
//对小数点进行回溯,把关注点放在小数点上
void backtrack(String s, int start, int count){
//满足条件,加入队列
if(count == 0){
String[] split = s.split("\\.");
if (split.length != 4)return;
for (String part : split){
if (part.length() > 1 && part.startsWith("0")) return;
if (Integer.parseInt(part) > 255) return;
}
res.add(s);
return;
}
int len = s.length();
if (start >= len) return;
if (count >= 0 && start < len - 1)
backtrack(s.substring(0, start+1)+"."+s.substring(start+1, len),start+2, count-1);
if (count >= 0 && start < len - 2)
backtrack(s.substring(0, start+2)+"."+s.substring(start+2, len),start+3, count-1);
if (count >= 0 && start < len - 3)
backtrack(s.substring(0, start+3)+"."+s.substring(start+3, len),start+4, count-1);
}
}