失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【LeetCode笔记】剑指 Offer 93. 复原 IP 地址(Java DFS 字符串)

【LeetCode笔记】剑指 Offer 93. 复原 IP 地址(Java DFS 字符串)

时间:2022-07-27 12:29:16

相关推荐

【LeetCode笔记】剑指 Offer 93. 复原 IP 地址(Java DFS 字符串)

文章目录

题目描述二刷

打卡第七天~

也是很常考的一道题了!感觉和把数字翻译成字符串这道题很像,也都可以用 DFS 来做

题目描述

还是定义全局的 list,在 DFS 的过程不断维护 list递归结束的情况:已经凑够四个数字(跑完了 string && 没跑完 string)前导0:当前数字首位为0,直接凑上0并往下一个数字 DFS其他DFS情况:最多3个数字,并且进行255的范围判断

class Solution {char[] arr;List<String> list = new ArrayList<>();public List<String> restoreIpAddresses(String s) {arr = s.toCharArray();dfs("", 0, 0);return list;}public void dfs(String pre, int integerNums, int start) {// 加了四个,并且跑完了 string 的情况if(start == arr.length) {if(integerNums == 4){list.add(pre.substring(0, pre.length() - 1));}return;}if(integerNums == 4) {return;}// 首位为0,直接冲(不能前导0)if(arr[start] == '0') {pre += '0';if(integerNums != 4) {pre += '.';}dfs(pre, integerNums + 1, start + 1);return;}// 首位不为0, 最多选三个int temp = 0;String tempIP = pre;for(int i = 0; i < 3 && start + i < arr.length; i++) {// 255 判断temp = temp * 10 + (arr[start + i] - '0');if(temp > 255) {break;}tempIP += arr[i + start];dfs(tempIP + '.', integerNums + 1, start + i + 1);}}}

二刷

思路不难,但是条条框框写起来是真的麻烦。。

class Solution {List<String> ans = new LinkedList<>();char[] arr;public List<String> restoreIpAddresses(String s) {arr = s.toCharArray();dfs("", 0, 0);return ans;}void dfs(String s, int index, int pointCounts) {if(pointCounts > 0 && pointCounts < 4) {s += '.';}if(index == arr.length) {if(pointCounts == 4) {ans.add(s);}return;}if(pointCounts == 4) {return;}if(arr[index] == '0') {dfs(s + '0', index + 1, pointCounts + 1);}else {int num = 0;String tempIP = s;for(int i = 0; i < 3 && index + i < arr.length; i++) {num *= 10;num += arr[i + index] - '0';tempIP += arr[i + index];if(num <= 255) {dfs(tempIP, index + i + 1, pointCounts + 1);}}}}}

如果觉得《【LeetCode笔记】剑指 Offer 93. 复原 IP 地址(Java DFS 字符串)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。