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();
        }
    }
}
相关推荐
云姜.2 分钟前
线程和进程的关系
java·linux·jvm
是码龙不是码农3 分钟前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性
曹牧4 分钟前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言
heartbeat..4 分钟前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范
WeiXiao_Hyy7 分钟前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
苏渡苇13 分钟前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
团子的二进制世界20 分钟前
G1垃圾收集器是如何工作的?
java·jvm·算法
吃杠碰小鸡24 分钟前
高中数学-数列-导数证明
前端·数学·算法
故事不长丨24 分钟前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
long31625 分钟前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法