leetcode 39 dfs leetcode 40 dfs
leetcode 39
先排序,然后dfs
注意先整全局变量可以减少空间利用
class Solution {
vector<vector<int>>ret;
vector<int>temp;
vector<int> srt;
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
srt=candidates;
sort(srt.begin(),srt.end());
dfs(target,0); //从下标0开始,杜绝0 1 ,1 0下这样的重复
return ret;
}
void dfs(int target,int index){
if(target==0)
{
ret.push_back(temp);
return;
}
for(int i=index;i<srt.size()&&(target-srt[i]>=0);i++)
{
temp.push_back(srt[i]);
dfs(target-srt[i],i);
temp.pop_back();
}
return;
}
};

leetcode 40
在39的基础上改了改
注意 vector的find是借助algorithm实现的
class Solution {
vector<vector<int>>ret;
vector<int>temp;
vector<int> srt;
public:
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
srt=candidates;
sort(srt.begin(),srt.end());
dfs(target,0); //从下标0开始,杜绝0 1 ,1 0下这样的重复
return ret;
}
void dfs(int target,int index){
if(target==0)
{
//vector<vector<int>> :: itrator it;
if(find(ret.begin(),ret.end(),temp)==ret.end())
ret.push_back(temp);
return;
}
for(int i=index;i<srt.size()&&(target-srt[i]>=0);i++)
{
temp.push_back(srt[i]);
dfs(target-srt[i],i+1);
temp.pop_back();
}
return;
}
};

然后剪枝的话这样
class Solution {
vector<vector<int>>ret;
vector<int>temp;
int tp;
vector<int> srt;
int tar;
public:
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
srt=candidates;
sort(srt.begin(),srt.end());
tar=target;
dfs(target,0); //从下标0开始,杜绝0 1 ,1 0下这样的重复
return ret;
}
void dfs(int target,int index){
if(target==0)
{
//vector<vector<int>> :: itrator it;
//if(find(ret.begin(),ret.end(),temp)==ret.end())
ret.push_back(temp);
return;
}
for(int i=index;i<srt.size()&&(target-srt[i]>=0);i++)
{
if(i>index&&srt[i]==srt[i-1]) //index表示的是当前target对应的,开始的位置,后续如果==index,对于同一个target会形成重复;若是不同target不会重复
continue;
temp.push_back(srt[i]);
dfs(target-srt[i],i+1);
temp.pop_back();
}
return;
}
};

leetcode 39 dfs leetcode 40 dfs的更多相关文章
- [leetcode] 39. 组合总和(Java)(dfs、递归、回溯)
39. 组合总和 直接暴力思路,用dfs+回溯枚举所有可能组合情况.难点在于每个数可取无数次. 我的枚举思路是: 外层枚举答案数组的长度,即枚举解中的数字个数,从1个开始,到target/ min(c ...
- Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers) 深度优先搜索的解题详细介绍,点击 给定一个二叉树,它的每个结点都存放 ...
- Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)
Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix) 深度优先搜索的解题详细介绍,点击 给定一个整数矩 ...
- [LeetCode] 130. Surrounded Regions_Medium tag: DFS/BFS
Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A reg ...
- Leetcode之深度优先搜索(DFS)专题-199. 二叉树的右视图(Binary Tree Right Side View)
Leetcode之深度优先搜索(DFS)专题-199. 二叉树的右视图(Binary Tree Right Side View) 深度优先搜索的解题详细介绍,点击 给定一棵二叉树,想象自己站在它的右侧 ...
- Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree)
Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree) 深度优先搜索的解题详细介绍,点击 给定一个 N 叉树,找到其最大深度 ...
- Leetcode之深度优先搜索(DFS)专题-1020. 飞地的数量(Number of Enclaves)
Leetcode之深度优先搜索(DFS)专题-1020. 飞地的数量(Number of Enclaves) 深度优先搜索的解题详细介绍,点击 给出一个二维数组 A,每个单元格为 0(代表海)或 1( ...
- Leetcode之深度优先搜索(DFS)专题-690. 员工的重要性(Employee Importance)
Leetcode之深度优先搜索(DFS)专题-690. 员工的重要性(Employee Importance) 深度优先搜索的解题详细介绍,点击 给定一个保存员工信息的数据结构,它包含了员工唯一的id ...
- Leetcode之深度优先搜索(DFS)专题-733. 图像渲染(Flood Fill)
Leetcode之深度优先搜索(DFS)专题-733. 图像渲染(Flood Fill) 深度优先搜索的解题详细介绍,点击 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 ...
随机推荐
- cursor pin s和cursor pin s wait on x
1.cursor pin s是一个共享锁,一般情况下是因为发生在SQL短时间内大量执行 案例:在生产库中,突然出现大量的cursor pin s的等待,询问是否有动作后,同事说有编译存储过程(被误导了 ...
- 代码页(CodePage)列表
代码页编号 国家地区或语言37 IBM037 IBM EBCDIC (US-Canada) 437 IBM437 ...
- CodeMonkey少儿编程第2章 turnTo对象
目标 了解对象的概念 了解方法与对象的关系 掌握turnTo指令的用法 在开始本章的学习之前,我们先来复习一下上一章的知识点. 在第1章中,我们学会了在这个游戏中最简单的两个指令. step x 其中 ...
- NFS存储迁移至GlusterFS
NFS存储迁移至GlusterFS 前提条件 为防止脑裂,建议使用最低3台节点制作3复制集的存储卷: 在进行存储迁移前,GluseterFS存储节点需先成为k8s集群中的node节点: 存储切换时请勿 ...
- 抓包一张tcpdump小抄就够了
作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络等. ...
- git branch --set-upstream-to=
test@uat:/usr/server/app_server# git config --local -lcore.repositoryformatversion=0core.filemode=tr ...
- LOJ10145郁闷的出纳员
传送门:https://loj.ac/problem/10145 简单的平衡树 ------------------------------------ 1 #include<bits/stdc ...
- 一个sql盲注小工具 (Golang版)
并发,二分法判断. 源码写的有点垃圾,有点乱,结果也存在一些缺失. 记录: sql:select distinct 中的distinct选项,这是只会获取你表中不重复数据,是表中,而不是你一次sql执 ...
- CSS定位走一波(定位学习续)
又是新的一周过去了,时间到了,春天绿了,关于HTML5的学习进步了,今天博客更新一些CSS定位的内容,小的一些细节也要牢记,方便做一个更完美的项目. 如何让垂直方向居中,解决方式:在父元素添加over ...
- Java——I/O入门相关练习代码
流的概念 读取文件 读取文件1 读取文件2 读取文件3 读取文件4 skip跳过n个字节后再开始读取 读取过程中暂停给当前位置做一个标记下一次从标记位置开始读取 序列流集合流 把三个流添加到集合中合并 ...