代码随想录算法刷题训练营day28:LeetCode(93)复原IP地址 、LeetCode(78)子集 、LeetCode(90)子集II

代码随想录算法刷题训练营day28:LeetCode(93)复原IP地址 、LeetCode(78)子集 、LeetCode(90)子集II

LeetCode(93)复原IP地址
题目
在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

class Solution {
    public List<String> result=new ArrayList<>();//存放最终结果
    public List<Integer> path=new ArrayList<>();//存放路径结果
    public  List<String> restoreIpAddresses(String s) {
        int startIndex=0;
        //调用回溯函数
        backtracking(s,startIndex);
        return result;
    }
    public  void backtracking(String s,int startIndex){
        //终止节点
        if(path.size()==4){
            List<Integer> tempdate=Arrays.asList(new Integer[path.size()]);
            Collections.copy(tempdate, path);
            StringBuffer date=new StringBuffer();
            for (Integer tempdate2 : tempdate) {
                date.append(String.valueOf(tempdate2));
                date.append(".");
            }
            date.deleteCharAt(date.length()-1);
            String tempDate=date.toString();
            result.add(tempDate);
            return ;
        }
        //单层递归循环逻辑
        for(int i=startIndex;i<s.length();i++){
            String date1=s.substring(startIndex, i+1);//把数据截取出来
            if(date1.length()>1&&date1.charAt(0)=='0'){
                continue;
            }
            if(date1.length()>3){
                continue;
            }
            int date2=Integer.parseInt(date1);
            if(date2<0||date2>255){

                continue;
            }
            path.add(date2);
            if(path.size()==4&&i+1!=s.length()){
                path.remove(path.size()-1);
                continue;//关键
            }
            backtracking(s, i+1);
            //回溯
            path.remove(path.size()-1);
        }
    }
}

LeetCode(78)子集
题目
在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

class Solution {
    public List<List<Integer>> result=new ArrayList<>();
    public List<Integer> path=new ArrayList<>();
    public List<List<Integer>> subsets(int[] nums) {
       /* List<Integer> nullPath=new ArrayList<>();
       result.add(nullPath); */
       int startIndex=0;
       backtracking(nums,startIndex);
       return result;
    }
    public void backtracking(int[] nums,int startIndex){
        //终止条件
        List<Integer> tempDate=Arrays.asList(new Integer[path.size()]);
        Collections.copy(tempDate, path);
        result.add(tempDate);
        for(int i=startIndex;i<nums.length;i++){
            path.add(nums[i]);
            backtracking(nums, i+1);
            path.remove(path.size()-1);
        }
    }
}

LeetCode(90)子集II
题目
在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

class Solution {
    public List<List<Integer>> result=new ArrayList<>();
    public List<Integer> path=new ArrayList<>();
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        int startIndex=0;
        //排序
        Arrays.sort(nums);
        int[] used=new int[nums.length];//0代表没使用,1代表使用了
        backtracking(nums,used,startIndex);
        return result;
    }
    public void backtracking(int[] nums,int[] used, int startIndex){
        List<Integer>  tempPath=Arrays.asList(new Integer[path.size()]);
        Collections.copy(tempPath, path);
        result.add(tempPath);

        for(int i=startIndex;i<nums.length;i++){
            if(i>0&&nums[i]==nums[i-1]&&used[i-1]==0){//重点思考
                continue;
            }
            path.add(nums[i]);
            used[i]=1;
            backtracking(nums, used, i+1);
            path.remove(path.size()-1);
            used[i]=0;
        }   
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值