当前位置:网站首页>复原IP地址[标准回溯+标准剪枝]
复原IP地址[标准回溯+标准剪枝]
2022-06-23 22:18:00 【REN_林森】
前言
复原IP地址,标准的回溯搜索,由于IP地址的限定,标准的剪枝练习。
一、复原IP地址

二、回溯搜索+多剪枝+常见bug
package everyday.medium;
import java.util.LinkedList;
import java.util.List;
// 复原IP地址
public class RestoreIpAddresses {
/* target:给一个字符串s,拆分成4块,看是否是合法的IP地址。 合法IP地址:1:0-255;2:只有4份数;3:除了0没有前导为0的数. */
public List<String> restoreIpAddresses(String s) {
List<String> ans = new LinkedList<>();
StringBuilder sb = new StringBuilder();
// 枚举 填充符合条件的IP
dfs(s, 0, 0, sb, ans);
// 返回填充好的列表
return ans;
}
private void dfs(String s, int cur, int n, StringBuilder sb, List<String> ans) {
if (n == 4 && cur == s.length()) {
// 能到这里,都是符合条件的IP地址。
sb.deleteCharAt(sb.length() - 1);
ans.add(new String(sb));
// bug2:把 . 删除了,添加之后又不加上去,回溯时会出现删多的情况。
sb.append('.');
return;
}
// 如果数字还没用完,而已经分了四份了,剪枝;如果没到4份,但是数字已经没用,剪枝。
if (n == 4 || cur == s.length()) return;
// 如果 s.length() - (4 - n) * 4 > 0时,绝不可能形成IP,剪枝。
// bug1:s.length()永远不变,所以会有>0提前return的情况,应该是s.length() - cur - 1
if (s.length() - cur - 1 - (4 - n) * 4 > 0) return;
// 标准回溯
for (int i = 0; i < 3 && i + cur < s.length(); i++) {
// IP 长度小于3位,剪枝。
// 前导为0,那只能是0.
if (i == 0 && s.charAt(cur) == '0') {
sb.append("0.");
dfs(s, cur + 1, n + 1, sb, ans);
sb.delete(sb.length() - 2, sb.length());
break;
}
// 前导非0
String str = s.substring(cur, cur + i + 1);
int len = str.length();
int val = Integer.parseInt(str);
if (val <= 255) {
sb.append(val).append('.');
dfs(s, cur + i + 1, n + 1, sb, ans);
sb.delete(sb.length() - len - 1, sb.length());
}
}
}
public static void main(String[] args) {
new RestoreIpAddresses().restoreIpAddresses("25525511135");
}
}
总结
1)回溯搜索 + 标准剪枝 + 常见回溯bug
参考文献
[1] LeetCode 复原IP地址
边栏推荐
- 为实现“双碳”目标,应如何实现节能、合理的照明管控
- 1004. number of maximum consecutive 1 III ●●
- 7、STM32——LCD
- 2022年信息安全工程師考試知識點:訪問控制
- Task queue of laravel
- What kind of automated test is used for H5 mobile terminal
- Multi store drug inventory system source code large chain drugstore management system source code
- Digital supply chain management system for metallurgical industry: platform lean enterprise management to help the high-quality development of the industry
- Simple understanding of responsive programming
- 再见,2020,这碗毒鸡汤,我先干了
猜你喜欢

PMP考试相关计算公式汇总!考前必看

Improvement of DC power distribution with open hall current sensor

不容错过 | 华为内部资料--成功的项目管理PPT(123页)

Image segmentation - data annotation

MySQL索引底层为什么用B+树?看完这篇文章,轻松应对面试。

高仿斗鱼 APP

STM32-------外部中斷

"Shanda Diwei Cup" the 12th Shandong ICPC undergraduate program design competition

Multi store drug inventory system source code large chain drugstore management system source code

List<? extends T>和List<?super T>区别
随机推荐
STM32------ADC(电压检测)
[things about gbase] gbase 8s high availability technology and case analysis (issue 02)
Stm32 - - - - interruption externe
ACM. Hj89 24 point operation ●●●
【HackTheBox】 meow
2022年信息安全工程師考試知識點:訪問控制
ORB_SLAM3环境搭建及demo演示
How to achieve the turning effect of wechat video recording?
PMP考试相关计算公式汇总!考前必看
smart-doc + Torna 兼容版本
6 大完整开源项目,一次学个够
思考(八十六):主从实现思路
APP性能优化之启动流程分析
What are the good solutions for industrial control safety of production line
2.摄像机标定
2022年信息安全工程师考试知识点:访问控制
Preliminary understanding of 3D printing and laser cutting process
Golang type assertion
Loop caused by add of sublist in list
Kotlin coroutine asynchronous flow