您的位置:首页 > 其它

restore ip addresses

2016-12-09 11:25 232 查看
题意:给定一串数字,返回这串数字能够组成的所有合法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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: