作者:1614221827wwz | 来源:互联网 | 2023-09-13 12:14
题目
93. 复原 IP 地址【中等】
题解
又是回溯法…
下面这句话很重要:
回溯算法事实上就是在一个树形问题上做深度优先遍历,因此 首先需要把问题转换为树形问题。
这题主要利用 indexindexindex 和 startstartstart 两个变量控制DFS
- index为IP地址处理到第几个段了,每次+1
- start是原始字符串中遍历到第几个字符
class Solution {static final int SEG_NUM&#61;4;List<String>res&#61;new ArrayList<>();int[] segment&#61;new int[SEG_NUM];public List<String> restoreIpAddresses(String s) {int n&#61;s.length();if(n<4||n>12)return res;dfs(s,0,0);return res;}public void dfs(String s,int index,int start){int n&#61;s.length();if(index&#61;&#61;SEG_NUM){if(start&#61;&#61;n){StringBuilder str&#61;new StringBuilder();for(int i&#61;0;i<SEG_NUM;i&#43;&#43;){str.append(segment[i]);if(i!&#61;SEG_NUM-1)str.append(&#39;.&#39;);}res.add(str.toString());}return;}else{if(start&#61;&#61;n){return;}if(s.charAt(start)&#61;&#61;&#39;0&#39;){segment[index]&#61;0;dfs(s,index&#43;1,start&#43;1);}int addr&#61;0;for(int i&#61;start;i<n;i&#43;&#43;){addr&#61;addr*10&#43;(s.charAt(i)-&#39;0&#39;);if(addr>0&&addr<&#61;255){segment[index]&#61;addr;dfs(s,index&#43;1,i&#43;1);}elsereturn;}}}
}
P.S. StringBuilder
效率是java字符串中最高的&#xff0c;它的append函数有N多重载形式&#xff0c;因此可以直接添加int型变量&#xff1a;