当前位置:网站首页>每日一题-DFS
每日一题-DFS
2022-08-05 05:17:00 【菜鸡程序媛】
目录
组合总和
- 时间:0727
- 题目
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
- 思路
- 通过深度遍历的方式,找到满足条件的总和
- 当满足的时候,开始回溯,再从新的分支继续找,回溯的时候一定要记得状态重置
- ️ dfs向下遍历的时候,下标要用循环中的i而不是begin,如果用begin的话,会导致前面的数字会重复遍历并错误使用
- 代码
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
if(candidates == null || candidates.length <= 0)
return null;
List<List<Integer>> res = new ArrayList<>();
LinkedList<Integer> sb = new LinkedList<>();
dfs(candidates, 0, target, res, sb);
return res;
}
private void dfs(int[] candidates, int begin, int target, List<List<Integer>> res, LinkedList<Integer> sb){
if(target < 0)
return;
if(target == 0){
res.add(new ArrayList<>(sb));
begin += 2;
return;
}
for(int i = begin; i < candidates.length; i ++){
sb.addLast(candidates[i]);
//这里一定要是i,如果是begin的话,就会造成重复查找
dfs(candidates, i, target - candidates[i], res, sb);
sb.removeLast();
}
}
}
全排列
- 时间:0729
- 题目
给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
- 思路
- 这个题目是找到所有可能的排列组合,组合内的数字不能重复出现,这就要求有一个数组记录状态
- 这个题和上面的题目除了满足的目标条件不一样,还有一点就是上面的题目是要找等于目标值的子数组,前面的数字用过了就不需要二次访问了;但是本题全排列,每个数字都需要出现在所有的结果子集里面,所以就不需要记录当前已经访问到哪个下标了。
- 代码
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
if(nums == null || nums.length == 0)
return res;
LinkedList<Integer> list = new LinkedList<>();
// 用来存储已经访问过的元素
boolean[] used = new boolean[nums.length];
dfs(nums, res, list, used);
return res;
}
private void dfs(int[] nums, List<List<Integer>> res, LinkedList<Integer> list, boolean[] used){
if(list.size() == nums.length){
res.add(new ArrayList<>(list));
return;
}
for(int i = 0; i < nums.length; i ++){
if(used[i])
continue;
list.addLast(nums[i]);
used[i] = true;
dfs(nums, res, list, used);
used[i] = false;
list.removeLast();
}
}
}
边栏推荐
猜你喜欢
LeetCode刷题之第55题
Redis集群(docker版)——从原理到实战超详细
[Pytorch study notes] 10. How to quickly create your own Dataset dataset object (inherit the Dataset class and override the corresponding method)
多边形等分
发顶会顶刊论文,你应该这样写作
Machine Learning (1) - Machine Learning Fundamentals
AIDL detailed explanation
神经网络也能像人类利用外围视觉一样观察图像
读论文-Cycle GAN
A deep learning code base for Xiaobai, one line of code implements 30+ attention mechanisms.
随机推荐
MaskDistill - Semantic segmentation without labeled data
MySQL
栈的应用——力扣 20.有效的括号
电子产品量产工具(5)- 页面系统实现
CVPR2021 - Inception Convolution with Efficient Dilation Search
【Over 15】A week of learning lstm
[After a 12] No record for a whole week
[Pytorch study notes] 11. Take a subset of the Dataset and shuffle the order of the Dataset (using Subset, random_split)
关于使用QML的MediaPlayer实现视频和音频的播放时遇到的一些坑
Jupyter notebook选择不同的Anaconda环境作为内核运行
CVPR2020 - 自校准卷积
CVPR 2022 |节省70%的显存,训练速度提高2倍
[Kaggle project actual combat record] Steps and ideas sharing of a picture classification project - taking leaf classification as an example (using Pytorch)
PID详解
初识机器学习
【ts】typescript高阶:联合类型与交叉类型
The University of Göttingen proposed CLIPSeg, a model that can perform three segmentation tasks at the same time
CVPR 2022 | 70% memory savings, 2x faster training
leetCode刷题之第31题
idea 快速日志