博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode] Restore IP Addresses
阅读量:4698 次
发布时间:2019-06-09

本文共 3172 字,大约阅读时间需要 10 分钟。

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枚举了。

import java.util.ArrayList;import java.util.List;public class Solution {    public List
restoreIpAddresses(String s) { List
res = new ArrayList
(); if (s.length() > 12) return res; StringBuilder sb = new StringBuilder(); dfs(res, sb, s, 0); return res; } private void dfs(List
res, StringBuilder sb, String s, int depth) { // System.out.println("sb:" + sb + ",s:" + s + ",depth:" + depth); if (depth > 4) return; if (depth == 4) { if (!s.equals("")) return; else { res.add(sb.toString().substring(0, sb.length() - 1)); } } for (int i = 1; i <= s.length() && i <= 3; i++) { String toInsert = s.substring(0, i); if (isValid(toInsert)) { sb.append(toInsert + "."); dfs(res, sb, s.substring(i), depth + 1); sb.delete(sb.length() - i - 1, sb.length()); } } } private boolean isValid(String toInsert) { int num = Integer.parseInt(toInsert); if (num > 255) return false; if (num != 0 && toInsert.startsWith("0") || num == 0 && !toInsert.equals("0")) return false; return true; } public static void main(String[] args) { String s = "010010"; System.out.println(new Solution().restoreIpAddresses(s)); }}
View Code

 

第二遍记录:

  注意用level控制递归的层次。

  注意StringBuilder删除的方法。

  注意valid的条件。

public class Solution {    public List
restoreIpAddresses(String s) { List
res = new ArrayList
(); if (s.length() > 12 || s.length() < 4) return res; StringBuilder sb = new StringBuilder(); restoreIp(res, sb, s, 0); return res; } private void restoreIp(List
res, StringBuilder sb, String s, int level) { if (level > 4) return; if (level == 4) { if (s.equals("")) { res.add(sb.toString().substring(0, sb.length() - 1)); } else return; } for (int i = 1; s.length() >= i && i < 4; i++) { String toInsert = s.substring(0, i); if (isValid(toInsert)) { sb.append(toInsert + '.'); restoreIp(res, sb, s.substring(i), level + 1); sb.delete(sb.length() - i - 1, sb.length()); } } } private boolean isValid(String s) { int num = Integer.parseInt(s); if (num > 255) return false; if (num != 0 && s.startsWith("0") || num == 0 && !s.equals("0")) return false; return true; }}

 

第三遍记录:

  注意level的运用,>4的情况直接终止。

  注意每次取substring的时候,注意判断是否超出范围。

 

转载于:https://www.cnblogs.com/jdflyfly/p/3819330.html

你可能感兴趣的文章
分享Kali Linux 2017年第18周镜像文件
查看>>
Android教程-03 常见布局的总结
查看>>
[React Native]访问操作系统剪贴板 Clipboard
查看>>
对互联网中常见地图的坐标系探讨
查看>>
IT - 偶像的力量
查看>>
POJ1743 Musical Theme(二分+后缀数组)
查看>>
git常用命令
查看>>
[No0000AA]Windows 系统环境变量列表
查看>>
English Time And Date
查看>>
外行人都能看得懂的机器学习,错过了血亏!
查看>>
Python JSON 基本使用
查看>>
Shell 实例:备份最后一天内所有修改过的文件
查看>>
定时执行程序-Quartz简单实例
查看>>
windows Api AlphaBlend的使用方法
查看>>
mysql主从延迟高的原因
查看>>
Leetcode 47. Permutations II
查看>>
DLL入门浅析【转】
查看>>
sql server:取当前时间前10分钟之内的数据 dateadd()
查看>>
python安装MySQLdb:出错Microsoft Visual C++ 9.0 is required
查看>>
BZOJ1027 [JSOI2007]合金 【计算几何 + floyd】
查看>>