【LeetCode第93题】复原IP地址(java实现)

【LeetCode第93题】复原IP地址

  • 递归+回溯
  • 代码实现
  • 总结

题目
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。

示例:输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]

递归+回溯

题目可以理解为一段字符串分成几断。思路就是先分一段出来,然后再把后面的字符串继续分,这是很常规的递归思想。也就是后续的动作都是重复的。

暂时分出这一段,是需要考虑分出来的长度的。以“25525511135”为例,ip地址每一段长度最长是3,第一段分出来的可以是“2”,可以是“25”,可以是“255”,有三种情况,然后将后面的字符串分为3段。

递归终止条件,就是看最后一次的字符串是不是符合ip地址的要求,即长度是1或者2或者3,数值的大小是小于等于255的。这里说一下为什么是255,ip地址是32位的,总共有4端,每一段是8位,那么最大就是(11111111)即255。符合这个要求的,说明这条路径上分段是合理的,维护一个全局的List存放结果即可。

这递归过程中,有一个剪枝的地方:0的特殊性,0放在每一段开头时长度只能是1,也就是说可以“0.0.10.100”,但不可以“0.00.01.011”。这里需要剪枝。

代码实现

递归+回溯:
回溯过程中就是把之前已经添加进暂存StringBuffer的一段删掉。

1class Solution {
   
 2    public List<String> res;
 3    public StringBuffer sb = new StringBuffer();
 4
 5    public List<String> restoreIpAddresses(String s) {
   
 6        res = new ArrayList<>();
 7        if (s.length() <= 

你可能感兴趣的:(刷题笔记,leetcode,剪枝,递归法,算法)