算法test001

给你一个包含数字的数组,返回所有可能组成ip的结果。如果没有返回false
输入:数组a为[2,5,5,2,5,5,1,1,1,3,5]
输出:[255.255.11.135, 255.255.111.35]

import java.util.ArrayList;
import java.util.List;

public class test001 {
public static void main (String[] args) {
test035 ip = new test035();
int[] a = new int[]{2,5,5,2,5,5,1,1,1,3,5};
// String s = a.toString();
String b="";
//对整型数组进行遍历,高级for循环
for(int i:a) {
//将整型数据变为字符串,valueof方法
String s1=String.valueOf(i);
//拼接字符串
b=b+s1;
}
List<string> res = ip.restoreIpAddresses(b);
if(res==null || res.isEmpty()){
System.out.println(false);
}else{
System.out.println(res);
}
}
public List<string> restoreIpAddresses(String s) {
List<string> ans = new ArrayList<>();//保存最终的所有结果
backtrack(s,0,new StringBuilder(),ans,0);
return ans;
}</string></string></string>

private void backtrack(String s,int st,StringBuilder t,List<String> ans,int c){
    //如果剩余的长度大于剩下的部分都取 3 位数的长度,那么直接结束
    if ( (s.length() - st) > (3*(4 - c))){
        return;
    }
    //当前刚好到达了末尾
    if (st == s.length()){
        if (c == 4) {//加入结果
            ans.add(new String(t.substring(0,t.length()-1)));
        }
        return;
    }
    //当前超过末位,或者已经到达了 4 部分结束掉
    if (st>s.length()||c==4){
        return;
    }
    //保存的当前的解
    StringBuilder builder = new StringBuilder(t);
    //加入1
    t.append(s.charAt(st)+""+'.');
    backtrack(s,st+1,t,ans,c+1);

    if (s.charAt(st)=='0')return;
    //加入2#10 33
    if(st+1<s.length()){
        t = new StringBuilder(builder);
        t.append(s.substring(st,st+2)+""+'.');
        backtrack(s,st+2,t,ans,c+1);
    }
    //加入3 #225
    if(st+2<s.length()){
        t = new StringBuilder(builder);
        int n =Integer.parseInt(s.substring(st,st+3));
        if(n>=0&&n<=255){
            t.append(s.substring(st,st+3)+""+'.');
            backtrack(s,st+3,t,ans,c+1);
        }

    }
}

}
欢迎交流指正~

算法 文章被收录于专栏

根据自己所见所闻进行算法归纳总结

全部评论

相关推荐

Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
06-12 16:00
天津大学 Java
牛客30236098...:腾讯坏事做尽,终面挂是最破防的 上次被挂了后我连简历都不刷了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务