回溯
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
class Solution {
List<String> list = new ArrayList<>();
LinkedList<String> li = new LinkedList<>();
public List<String> restoreIpAddresses(String s) {
/**
* 减枝
*/
if (s.length() < 4 || s.length() > 12){
return list;
}
backtracking(s, 0);
return list;
}
public void backtracking(String s, int startIndex){
/**
* 终止条件
* 当存储的合法数字为4个且索引到了末尾时,保留结果
* String.join()直接将列表连接成字符串
*/
if (li.size() == 4){
if (startIndex == s.length()) {
list.add(String.join(".", li));
}
else {
return;
}
}
for (int i = startIndex; i < s.length(); i++) {
if (verify(s.substring(startIndex, i + 1))){
li.add(s.substring(startIndex, i + 1));
backtracking(s, i + 1);
li.removeLast();
}
else {
break;
}
}
}
/**
* 判断数字是否合法
*/
public boolean verify(String s){
if (s.length() <= 1){
return true;
}
else if (s.length() > 3) {
return false;
}
else {
if (s.charAt(0) == '0'){
return false;
}
else {
return Integer.parseInt(s) <= 255;
}
}
}
}
/**
* 时间复杂度 O(3^4×|s|)
* 空间复杂度 O(1)
*/
https://leetcode-cn.com/problems/restore-ip-addresses/