[leetcode] Restore IP Addresses
生活随笔
收集整理的這篇文章主要介紹了
[leetcode] Restore IP Addresses
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這個(gè)題目就和Palindrome Partitioning很像了,而且比那個(gè)的DFS的遞歸要簡單一些,讓常人更好理解一些。但是邊界條件更多,要考慮清楚。
整體思路就是深度優(yōu)先搜索,首先看到邊界條件沒,如果沒有,就深度搜索:
一開始搜索1個(gè)字符和剩下的字符串,判斷該字符的index是否越界了,對于剩下的字符串遞歸;
然后是2個(gè)字符和剩下的字符串,判斷這2個(gè)字符的首字符是否是0,對于剩下的字符串遞歸;
然后是3個(gè)字符和剩下的字符串,判斷這3個(gè)字符的首字符是否是0,并且這3個(gè)字符組成的數(shù)字是否小于等于255,對于剩下的字符串遞歸。
ok,思路理清楚了,上代碼:
import java.util.ArrayList;public class Solution {ArrayList<String> rt = new ArrayList<String>();ArrayList<Integer> cand = new ArrayList<Integer>();String str;public ArrayList<String> restoreIpAddresses(String s) {// Start typing your Java solution below// DO NOT write main() function rt.clear();cand.clear();str = s;if (s.length() > 12)return rt;dfs(0);return rt;}//index 是當(dāng)前檢測的第一個(gè)字符private void dfs(int index) {//終止條件,已經(jīng)檢測到合法的candidate,那么添加到結(jié)果集if (cand.size() == 4 && index == str.length()) {addCandToRt();}//因?yàn)?位和2位數(shù)字肯定小于255,所以直接往更深搜索if (index >= str.length() || cand.size() >= 4)return;cand.add(Integer.parseInt(str.substring(index, index+1)));dfs(index+1);cand.remove(cand.size()-1);if (index >= str.length()-1 || str.substring(index, index+1).equals("0") || cand.size() >= 4)return;cand.add(Integer.parseInt(str.substring(index, index+2)));dfs(index+2);cand.remove(cand.size()-1);if (index >= str.length()-2 || str.substring(index, index+1).equals("0") || cand.size() >= 4)return;if (Integer.parseInt(str.substring(index, index+3)) <= 255) {cand.add(Integer.parseInt(str.substring(index, index+3)));dfs(index+3);cand.remove(cand.size()-1);}}private void addCandToRt() {String ip = cand.get(0) + "."+ cand.get(1) + "."+ cand.get(2) + "."+ cand.get(3);rt.add(ip);}public static void main(String[] args) {String s = "010010";Solution sl = new Solution();ArrayList<String> all = sl.restoreIpAddresses(s);for (int i = 0; i < all.size(); i++) {System.out.println(all.get(i));}} }我對這個(gè)題目的理解是,一個(gè)完整的DFS,加上數(shù)個(gè)條件的剪枝。
回頭看看有沒有別的辦法解這道題目。
轉(zhuǎn)載于:https://www.cnblogs.com/lihaozy/p/3182696.html
總結(jié)
以上是生活随笔為你收集整理的[leetcode] Restore IP Addresses的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java导出数据到excel模板_spr
- 下一篇: 七、Forword(请求转发)与Redi