restore ip addresses

題意:給定一串數字,返回這串數字能夠組成的所有合法ip。
思路:對ip的每一段進行isValid判斷,再對每一段的ip,若滿足長度爲3且通過isValid判斷,則返回;否則,對每一段的ip,若當前分割滿足isValid,則遞歸調用dfs,進行下一輪的調用。
代碼:

package com.RestoreIpAddresses;

import java.util.ArrayList;

public class RestoreIpAddresses {

    public boolean isValid(String string ) {
        if(string.charAt(0)=='0')   
            return string.equals('0');
        int num = Integer.parseInt(string);
        if(num > 0 && num <= 255)   return true;
        else return false;
    }

    public void dfs(String s , int start , String item , ArrayList<String>res) {
        if(start == 3 && isValid(s)){
            res.add(item+s);
            return;
        }
        for (int i = 0; i< 3 && i < s.length()-1; i++) {
            String substr = s.substring(0, i+1);
            if(isValid(substr)){
                dfs(s.substring(i+1, s.length()), start+1, item+substr+".", res);
            }
        }
    }

    public ArrayList<String> restoreIpAddresses(String s) {
        ArrayList<String> res = new ArrayList<>();
        String item = new String();
        if(s.length() < 4|| s.length() > 12){
            return res;
        }
        dfs(s, 0, item, res);
        return res;
    }


    public static void main(String[] args) {
        String string = "25525511135";
        RestoreIpAddresses ria = new RestoreIpAddresses();
        ArrayList<String>res = new ArrayList<>();
        res = ria.restoreIpAddresses(string);
        System.out.println(res);

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章