DAY28| 93. 复原IP地址 ,79.子集 ,90.子集II

文章目录

93.复原IP地址

文字讲解复原IP地址

视频讲解复原IP地址

**状态:**此题调试了几次ok,与昨天的分割回文子串相比,就是在判断终止条件处需要处理;

思路:

代码:

java 复制代码
class Solution {
    List<String> result = new ArrayList<>();
    LinkedList<String> tempList = new LinkedList<>();

    public List<String> restoreIpAddresses(String s) {
        backTracking(0, s);
        return result;
    }

    public void backTracking(Integer startIndex, String s) {
        if (tempList.size() == 3) {
            if (validIpParam(s.substring(startIndex, s.length()))) {
                tempList.offer(s.substring(startIndex, s.length()));
                result.add(getIp());
                tempList.pollLast();
            }
            return;
        }
        for (int i = startIndex; i < s.length() && tempList.size()<=4; i++) {
            if (validIpParam(s.substring(startIndex, i+1))) {
                tempList.offer(s.substring(startIndex, i+1));
            } else {
                continue;
            }
            backTracking(i+1, s);
            tempList.pollLast();
        }
    }

    public boolean validIpParam(String s) {
        if (s == null || s.length()==0) {
            return false;
        }
        if (s.length()>=2 && s.charAt(0)=='0') {
            return false;
        }
        if (s.length()>3) {
            return false;
        }
        Integer num = Integer.valueOf(s);
        if (num < 0 || num > 255) {
            return false;
        }
        return true;
    }

    public String getIp() {
        StringBuilder resultStr = new StringBuilder();
        for (int i = 0; i < tempList.size(); i++) {
            if (i==tempList.size()-1) {
                resultStr.append(tempList.get(i));
            } else {
                resultStr.append(tempList.get(i)).append(".");
            }
        }
        return resultStr.toString();
    }
}

78.子集

文字讲解子集

视频讲解子集

状态:这一题的关键在于收集元素的位置,理解了回溯算法中的树形结构和理论知识,这题可以想到在for循环中收集元素即可

思路:

代码:

java 复制代码
class Solution {
    List<List<Integer>> result = new ArrayList<>();
    LinkedList<Integer> tempList = new LinkedList<>();

    public List<List<Integer>> subsets(int[] nums) {
        backTracking(nums, 0);
        result.add(new ArrayList<>());
        return result;
    }

    public void backTracking(int[] nums, int index) {
        if (index>=nums.length) {
            return;
        }
        for (int i = index; i < nums.length; i++) {
            tempList.add(nums[i]);
          	//收集元素
            result.add(new ArrayList<>(tempList));
            backTracking(nums, i+1);
            tempList.pollLast();
        }
    }
}

90.子集II

文字讲解子集II

视频讲解子集II

状态:这题秒了

思路:

代码:

java 复制代码
class Solution {
    List<List<Integer>> result = new ArrayList<>();
    LinkedList<Integer> tempList = new LinkedList<>();
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        result.add(tempList);
        //对数组先进行排序
        Arrays.sort(nums);
        backTracking(nums, 0);
        return result;
    }

    public void backTracking(int[] nums, int startIndex) {
        if (startIndex>=nums.length) {
            return;
        }
        for (int i = startIndex; i < nums.length; i++) {
            if (i>startIndex&&nums[i]==nums[i-1]) {
                continue;
            }
            tempList.offer(nums[i]);
            result.add(new ArrayList<>(tempList));
            backTracking(nums, i+1);
            tempList.pollLast();
        }
    }
}
相关推荐
123过去18 分钟前
pixiewps使用教程
linux·网络·测试工具·算法·哈希算法
深圳市快瞳科技有限公司24 分钟前
低空经济下,鸟类识别算法与无人机硬件的兼容性优化策略
算法·无人机
zdl68632 分钟前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情34 分钟前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player36 分钟前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
努力中的编程者36 分钟前
二叉树(C语言底层实现)
c语言·开发语言·数据结构·c++·算法
重庆小透明41 分钟前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
RuoyiOffice1 小时前
企业请假销假系统设计实战:一张表、一套流程、两段生命周期——BPM节点驱动的表单变形术
java·spring·uni-app·vue·产品运营·ruoyi·anti-design-vue
鹤旗1 小时前
While语句,do-while语句,for语句
java·jvm·算法
qq_416018721 小时前
高性能密码学库
开发语言·c++·算法