【leetcode】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)

解析:题目旨将字符串转换成IP地址形式,即将字符串划分成为4个数字,每个数字介于0~255之间,但是除0外,010、001这种数字形式是不允许的。解法是通过DFS获得所有可能的IP形式,并且在递归过程中针对剩下的字符串长度和数字大小进行剪枝操作。


Java AC代码:

	List<String> res = new ArrayList<String>();

	public List<String> restoreIpAddresses(String s) {
		dfs(1, s, "");
		return res;
	}

	public void dfs(int count, String left, String cur) {
		if (count < 5 && count > 1) {
			cur = cur + ".";
		}else if (count == 5) {
			res.add(cur);
			return;
		}
		for (int i = 1; i <= 3 && i <= left.length(); i++) {
			if(left.substring(0, i).startsWith("0") && !left.substring(0, i).equals("0")){
				continue;
			}
			int temp = Integer.valueOf(left.substring(0, i));
			if (temp >= 0 && temp <= 255
					&& left.substring(i).length() >= (4 - count)
					&& left.substring(i).length() <= 3 * (4 - count)) {
				cur += left.substring(0, i);
				dfs(count + 1, left.substring(i), cur);
				cur = cur.substring(0, cur.length() - i);
			}
		}

	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值