Permutations,Permutations II,Combinations
这是使用DFS来解数组类题的典型题目,像求子集,和为sum的k个数也是一个类型
解题步骤:
1:有哪些起点,例如,数组中的每个元素都有可能作为起点,那么用个for循环就可以了。
2:是否允许重复组合
3:处理某个数,判断结果
4:dfs递归
5:还原现场
一:Permutations
Given a collection of numbers, return all possible permutations.
For example,[1,2,3]
have the following permutations:[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
.
代码:
class Solution {
void dfs(vector<int>& nums,int start,vector<vector<int>>& res,vector<int>& oneRes){ int n = nums.size(); if(start == n){
res.push_back(oneRes);
} for(int i= start;i<nums.size();++i){ if(i>start && nums[i]==nums[i-]){
continue;
} oneRes.push_back(nums[i]); swap(nums[i],nums[start]); dfs(nums,start+,res,oneRes); swap(nums[i],nums[start]); oneRes.pop_back();
}
}
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
vector<int> oneRes; dfs(nums,,res,oneRes); return res;
}
};
二:Permutations II
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,[1,1,2]
have the following unique permutations:[1,1,2]
, [1,2,1]
, and [2,1,1]
.
方法1.
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> res; vector<int> tmp(nums); sort(tmp.begin(),tmp.end()); res.push_back(tmp); while(next_permutation(tmp.begin(),tmp.end())){
res.push_back(tmp);
} return res;
}
};
方法2.
class Solution { void dfs(vector<int>& nums,int start,vector<vector<int>>& res,vector<int>& oneRes){ int n = nums.size(); if(start == n){
res.push_back(oneRes);
} for(int i= start;i<nums.size();++i){ if(i>start && nums[i]==nums[i-]){
continue;
} int selectNum = nums[i]; oneRes.push_back(selectNum); copy_backward(nums.begin()+start,nums.begin()+i,nums.begin()+i+);
nums[start] = selectNum; dfs(nums,start+,res,oneRes); copy(nums.begin()+start+,nums.begin()+i+,nums.begin()+start);
nums[i] = selectNum; oneRes.pop_back();
}
}
public:
vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> res;
vector<int> oneRes; sort(nums.begin(),nums.end()); dfs(nums,,res,oneRes); return res;
}
};
方法3.
class Solution {
public:
void dfs(vector<int> nums,int numsSize,int startPos,vector<vector<int>>& res,vector<int>& oneOfRes)
{
sort(nums.begin()+startPos,nums.end());
for(int i=startPos;i<numsSize;i++){
if(i>startPos && nums[i]==nums[i-]){
continue;
}
oneOfRes.push_back(nums[i]);
swap(nums[i],nums[startPos]);
if(oneOfRes.size()==numsSize){
res.push_back(oneOfRes);
}else{
dfs(nums,numsSize,startPos+,res,oneOfRes);
}
swap(nums[i],nums[startPos]);
oneOfRes.pop_back(); }
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
// sort(nums.begin(),nums.end());
vector<vector<int>> res;
vector<int> oneOfRes;
int numsSize = nums.size();
dfs(nums,numsSize,,res,oneOfRes);
return res;
}
};
77. Combinations
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
For example,
If n = 4 and k = 2, a solution is:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
class Solution {
void dfs(int n,int start,int k,int curk,vector<vector<int>>& res,vector<int>& oneRes){ if(curk == ){
res.push_back(oneRes);
return;
} for(int i=start;i<=n;++i){ oneRes.push_back(i); dfs(n,i+,k,curk-,res,oneRes); oneRes.pop_back(); }
}
public:
vector<vector<int>> combine(int n, int k) { vector<vector<int>> res;
vector<int> oneRes; dfs(n,,k,k,res,oneRes); return res;
}
};
Permutations,Permutations II,Combinations的更多相关文章
- LeetCode:Permutations, Permutations II(求全排列)
Permutations Given a collection of numbers, return all possible permutations. For example, [1,2,3] h ...
- leetcode总结:permutations, permutations II, next permutation, permutation sequence
Next Permutation: Implement next permutation, which rearranges numbers into the lexicographically ne ...
- LeetCode46,47 Permutations, Permutations II
题目: LeetCode46 I Given a collection of distinct numbers, return all possible permutations. (Medium) ...
- LeetCode解题报告—— Permutations & Permutations II & Rotate Image
1. Permutations Given a collection of distinct numbers, return all possible permutations. For exampl ...
- Permutations I&&II
Permutations I Given a collection of distinct numbers, return all possible permutations. For example ...
- Combination Sum II Combinations
https://leetcode.com/problems/combination-sum-ii/ 题目跟前面几道题很类似,直接写代码: class Solution { public: vector ...
- leetcode difficulty and frequency distribution chart
Here is a difficulty and frequency distribution chart for each problem (which I got from the Interne ...
- Leetcode——回溯法常考算法整理
Leetcode--回溯法常考算法整理 Preface Leetcode--回溯法常考算法整理 Definition Why & When to Use Backtrakcing How to ...
- Python标准模块--itertools
1 模块简介 Python提供了itertools模块,可以创建属于自己的迭代器.itertools提供的工具快速并且节约内存.开发者可以使用这些工具创建属于自己特定的迭代器,这些特定的迭代器可以用于 ...
随机推荐
- 项目总结之MIT (一)
打开Plan才知道,原来这个项目伴随了我整个八月,做项目的时间果然特别快~~ 首先把之前出现但是只知其然但是不知其所以然的知识点总结一下 一.使用母版页 二.Ajax 控件 & Custome ...
- javascript高级知识点——memoization
memoization是一种非常有用的优化技术,它缓存特定输入产生的相应结果.这样麻烦的查找和迭代计算可以尽可能的减少. 它基本的思想是针对特定的输入,已经计算过的结果都是通过缓存当中的数据直接返回而 ...
- CSS学习笔记——盒模型,块级元素和行内元素的区别和特性
今天本来打算根据自己的计划进行前端自动化的学习的,无奈早上接到一个任务需求需要新增一个页面.自从因为工作需要转前端之后,自己的主要注意力几 乎都放在JavaScript上面了,对CSS和HTML这方面 ...
- BeeswaxException 以及其他问题
Could not read table BeeswaxException(handle=QueryHandle(log_context='ae18ae74-518f-400b-b4b0-d399ed ...
- Python-windows服务-重启自动化
一. 前言 有了上一篇的“python初学”的基础,咱们就有了python的开发包,有了开发环境IDE,那我们就可以干活了.我的第一个选题就是让我们的windows服务可以按照我们的意愿进行自动重启. ...
- data source 和initial catalog
initial catalog与database的区别是什么Initial Catalog: DataBase: 两者没有任何区别只是名称不一样,就好像是人类的真实姓名与曾用名一样..都可以叫你. * ...
- CATCell <——>CATPoint
假定原先有CATCell tCell; CATVertex_var spVertex = tCell; CATPoint_var spPoint = spVertex -> GetPoint() ...
- Nexus远程Maven仓库索引下载教程
下载Maven仓库索引有两种方式: 一.手动下载 首先将索引下载到本地,下载地址:nexus-maven-repository-index.zip 解压索引压缩包,将里面内容全部拷贝 关闭当前Ne ...
- 转:说说JSON和JSONP
前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...
- ZRender源码分析2:Storage(Model层)
回顾 上一篇请移步:zrender源码分析1:总体结构 本篇进行ZRender的MVC结构中的M进行分析 总体理解 上篇说到,Storage负责MVC层中的Model,也就是模型,对于zrender来 ...