Restore IP Addresses
来源:互联网 发布:网络贷款诈骗方式 编辑:程序博客网 时间:2024/06/04 20:01
【题目】
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)
【题意】
给一个字符串,求出可能组成有效ip地址的所有组合。例如:给25525511135,要求返回可能的IP:255.255.11.135,255.255.111.35。
【分析】
ipv4是由四位段组成,每段范围是0到255,满足了一共有4位,并且每一位都合法的话,那么这个字符串便是满足题意的字符串,可以加入结果集。
用回溯法解这道题。回溯算法也叫试探法,它是一种系统地搜索问题的解的方法,经典的八皇后问题就可以用回溯法。它的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。这和人走迷宫的思路类似。回溯法是一个通用的解题法,比如需要求一个最优解,没有一个直接的方式可以得到结论,但是我们可以试探性的尝试每一条路,这样所有解都出来了。
例如有11111,那么按照人的思维也是先尝试1.1.1.11,再试试11.1.1.1也可以,尝试111.1.1.x的时候发现数字不够用了,就说明这个尝试失败了。
解题程序从IP地址的第一段开始不断地取1~3位字符尝试,如果合法就继续递归尝试IP地址的第二段,直到第四段,遇到可行的解就记录下来,如果不合法或者到了第四段发现不可能是正确的IP就退出。
实现:
public class leetcode {ArrayList<String> res = new ArrayList<String>(); public List<String> restoreIpAddresses(String s) { backTracking(s, 0, ""); return res; } //w表示为处理的字符串,m表示已经加入地址的字符串 //d表示目前识别的是ip的第几段,从0到3 public void backTracking(String w, int d, String m) { //位数不符,直接pass int len = w.length(); if (len < 4 - d || len > 3 * (4 - d)) return; //识别到最后一段时,如果符合,添加到结果集 if (d == 3) { if (w.length() > 1 && w.charAt(0) == '0') return; //防止“010”这种情况 int last = Integer.valueOf(w); if (last >= 0 && last <= 255) { m += w; res.add(m); } } //识别ip的前三段,每段可能是1位、2位、3位 for (int i = 1; i < 4 && i < w.length(); i++) { String str = w.substring(0, i); if (str.length() > 1 && str.charAt(0) == '0') return; //防止“010”这种情况 int t = Integer.valueOf(str); if (t >= 0 && t <= 255) { String next = m + str + "."; backTracking(w.substring(i), d + 1, next); } } }}
回溯思想:
1、定义一个解空间,它包含问题的解。
2、利用适于搜索的方法组织解空间。
3、利用深度优先法搜索解空间。
4、利用限界函数避免移动到不可能产生解的子空间。
问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特性。
- LeetCode: Restore IP Addresses
- Restore IP Addresses
- LeetCode : Restore IP Addresses
- [LeetCode] Restore IP Addresses
- Restore IP Addresses
- [LeetCode]Restore IP Addresses
- Restore IP Addresses
- Restore IP Addresses
- LeetCode:Restore IP Addresses
- Restore IP Addresses
- Restore IP Addresses
- LeetCode Restore IP Addresses
- [leetcode] Restore IP Addresses
- Restore IP Addresses
- LeetCode:Restore IP Addresses
- [LeetCode] Restore IP Addresses
- LeetCode - Restore IP Addresses
- LeetCode | Restore IP Addresses
- setTimeout
- 驱动安装失败在PC端ADB通过TCPIP连接调试
- STM32之内存分布与总线
- 【华为OJ】【059-201301-JAVA-题目2-3级】
- 动态创建Lambda表达式实现高级查询
- Restore IP Addresses
- 高仿QQ界面(2)
- Debug时如何跳过(不执行)某些代码
- 【牛腩新闻发布系统】 Web
- STL源码笔记(16)—单链表slist
- 图像算法研究---Bezier曲线详解
- 严重: Exception loading sessions from persistent storage
- C#做一个简单的进行串口通信的上位机
- theano安装(一)windows配置安装theano环境(非GPU版)、keras