描述
现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。
例如:
给出的字符串为"25525522135",
返回["255.255.22.135", "255.255.221.35"]. (顺序没有关系)
数据范围:字符串长度 0 \le n \le 120≤n≤12
要求:空间复杂度 O(n!)O(n!),时间复杂度 O(n!)O(n!)
注意:ip地址是由四段数字组成的数字序列,格式如 "x.x.x.x",其中 x 的范围应当是 [0,255]。
题目求解:简单使用四个循环处理ip地址的四个部分,但是要注意不要有前驱0的数,以及需要使用到所有提供的数字。
public class Solution {
/**
*
* @param s string字符串
* @return string字符串ArrayList
*/
public ArrayList<String> restoreIpAddresses (String s) {
// write code here
ArrayList<String> list=new ArrayList<>();
String num1="#",num2,num3,num4;
for(int i=0;i<3&&i<s.length();i++)
{
StringBuilder sb=new StringBuilder();
if(!num1.equals("0")){
num1=s.substring(0, i+1);
}
if(Integer.valueOf(num1)>=256) continue;
num2="#";
for(int j=i+1;j-i<=3&&j<s.length();j++)
{
if(!num2.equals("0")){
num2=s.substring(i+1,j+1);
}
if(Integer.valueOf(num2)>=256) continue;
num3="#";
for (int m=j+1;m-j<=3&&m<s.length();m++)
{
if(!num3.equals("0")){
num3=s.substring(j+1,m+1);
}
if(Integer.valueOf(num3)>=256) continue;
num4="#";
for(int n=m+1;n-m<=3&&n<s.length();n++)
{
if(!num4.equals("0"))
{num4=s.substring(m+1,n+1);
}
if(Integer.valueOf(num4)>=256) continue;
if(n==s.length()-1&&(num1.length()+num2.length()+num3.length()+num4.length())==s.length())
{
sb.append(num1+"."+num2+"."+num3+"."+num4);
list.add(sb.toString());
sb.delete(0,sb.length());
}
}
}
}
}
return list;
}
}