文章目錄
打卡第七天~
- 也是很常考的一道題了!
- 感覺和把數字翻譯成字符串這道題很像,也都可以用 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
) {if(start
== arr
.length
) {if(integerNums
== 4){list
.add(pre
.substring(0, pre
.length() - 1));}return;}if(integerNums
== 4) {return;}if(arr
[start
] == '0') {pre
+= '0';if(integerNums
!= 4) {pre
+= '.';}dfs(pre
, integerNums
+ 1, start
+ 1);return;}int temp
= 0;String tempIP
= pre
;for(int i
= 0; i
< 3 && start
+ i
< arr
.length
; i
++) {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、字符串)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。