Offer_93
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/restore-ip-addresses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution { private List<String> ret; private StringBuilder sb; public List<String> restoreIpAddresses(String s) { ret = new ArrayList<>(); sb = new StringBuilder(); if (s.length() > 12) { return ret; } dfs(0, s); return ret; } private void dfs(int n, String s) { // 对结果的剪枝 if (n == 4 || s.length() == 0) { // 对结果的保存 if (n == 4 && s.length() == 0) { ret.add(sb.toString()); } return ; } // 注意的有i的长度不能大于2 for (int i = 0; i < s.length() && i <= 2; i++) { // 对于第一个截取的字符串,首位不能为0, 如果为0, 则直接中断循环 // 进行下一次遍历查找,这是可行性剪枝 if (i != 0 && s.charAt(0) == '0') { break; } // 截取字符串, 待加入字符串 String part = s.substring(0, i + 1); // 对于待加入的字符串进行可行性判断 if (Integer.valueOf(part) <= 255) { // 对待输出的结果进行处理,加'.' if (sb.length() != 0) { part = '.' + part; } // 加入 sb.append(part); // 探索 dfs(n + 1, s.substring(i + 1)); // 回溯 sb.delete(sb.length() - part.length(), sb.length()); } } } }

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号