`
huntfor
  • 浏览: 201207 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[leetcode]Restore IP Addresses

 
阅读更多

新博文地址:[leetcode]Restore IP Addresses

 

Restore IP Addresses

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)

 还是很经典的DFS,只不过要做出一些剪枝操作,

比如第一字段已经确定,后缀长应该在[3,9],如果不再这个范围可以直接跳过

字段以0开头是不合法的,直接跳过(单个0是合法的)

字段大小超过255是不合法的,直接跳过。

跳过要记得回溯

	List<String> result = new ArrayList<String>();
	public List<String> restoreIpAddresses(String s) {
		dfs("", s, 1);
		return result;		
    }
	
	private void dfs(String pre,String s, int frag){//frag表示字段数
		if(frag == 4 && s.length() < 4 && Integer.valueOf(s) <= 255 ){
			if(s.length() > 1 && s.charAt(0) == '0'){//字段长>1,但是以0开头
				return;
			}
			String oneCase = pre + "." + s;
			result.add(oneCase);
			return;
		}
		if(frag != 1){
			pre += ".";
		}
		for(int i = 0 ; i < 3 && i < s.length(); i++){
			String suffix = s.substring(i + 1);
			String thisFrag = s.substring(0, i + 1);
			if(suffix.length() <= 3 * (4 - frag) && suffix.length() >= (4-frag) && Integer.valueOf(thisFrag) < 256 ){//由于太长了,我将以0开头的剪枝条件放在里面了。。。
				if(thisFrag.length() > 1 && thisFrag.charAt(0)=='0'){
					break;
				}
				pre += thisFrag;
				dfs(pre, suffix, frag + 1);
				pre = pre.substring(0, pre.length() - thisFrag.length());//回溯
			}
		}
	}

 

分享到:
评论

相关推荐

    python-leetcode题解之093-Restore-IP-Addresses

    python python_leetcode题解之093_Restore_IP_Addresses

    c语言-leetcode题解之0093-restore-ip-addresses.zip

    c语言基础 c语言_leetcode题解之0093_restore_ip_addresses.zip

    js-leetcode题解之93-restore-ip-addresses.js

    javascript js_leetcode题解之93-restore-ip-addresses.js

    leetcode盒子嵌套-leetcode-text:leetcode-文本

    leetcode盒子嵌套 leetcode-text 92.Reverse Linked List II Runtime: 4 ms, faster than 67.04% of C online submissions for Reverse Linked List II. Memory Usage: 6.9 MB, less than 100.00% of C online ...

    leetcode字符串括号level-leetcode:LeetCode解题记录

    restoreIPAddresses 复原IP地址 threeSum 三数之和 search 搜索旋转排序数组 1. 3. 9. 75. 209. 219. 167. 268. 344. 349. 454. 447. 695. 674. string 字符串 20. 150. linklist 链表 19. 24. 86. 92. 203. 206. ...

    leetcode怎么计算空间复杂度是指-LeetCode-Solution:我的第一个LeetCode解决方案

    093:Restore IP Addresses 树的遍历问题也可以用这种思想来解释。只不过是特殊的递归而已。(只有两路,不用循环) 题型二:动态规划(要整理搜索和DP的区别,都可以用一个状态转移公式F(n)表示) 053:最大字串...

    Coding Interview In Java

    leetcode Java 246 題目及解答 (英文) Contents 1 Rotate Array in Java 15 2 Reverse Words in a String II 19 ...243 Restore IP Addresses 589 244 Reverse Integer 591 245 Palindrome Number 593

    手稿_V1.17

    `restoreIpAddresses` 是主入口,它初始化结果集合并调用 `helper` 函数开始搜索。 2. 在 `helper` 函数中,我们进行递归调用或循环迭代,对于每种可能的子串长度(1, 2, 或 3),检查其是否满足条件并进行处理。 3....

    手稿_V1.032

    `Solution`类有一个公共成员函数`restoreIpAddresses`,它接收一个字符串`s`作为参数,用于恢复可能的IP地址。同时,还定义了一个私有辅助函数`helper`,用于递归处理字符串`s`来构造IP地址。 2. **递归算法**:`...

    复原IP地址1

    def restoreIpAddresses(self, s: str) -&gt; List[str]: s_len = len(s) res = [] if s_len &lt; 4 or s_len &gt; 12: return res path = [] self.dfs(s, s_len, 0, 0, path, res) return res def dfs(self, s, ...

    leetcode卡-LeetCodeMing:ARTS之Leetcode记录

    leetcode卡 LeetCodeMing 记录自己日常刷题LeetCode的点滴,技术改变世界,FOR ...93.Restore IP Addresses [官网链接] () Array 1.Two Sum 15.3Sum 16.3Sum Closest 18.4Sum Other 306.Additive Number [官网链接] ()

    leetcode卡-arts:每周输出:Algorithm+Review+Tip+Share

    Algorithm:restore-ip-addresses(递归) Review:redis sentinel conf Tip:redis查看主从同步是否完成 Share:学习总结 - docker的基本使用 第一周 Algorithm:reverse-linked-list-ii(链表) Review:linux编程...

Global site tag (gtag.js) - Google Analytics