版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/princexiexiaofeng/article/details/79645669
题目描述:
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], ]
分析:
题意:给定两个整型数n和k,从1→n中任意选取k个数组成任意排列,返回所有排列。
思路:这道题要求返回所有排列,采用DFS搜索。我们初始化start = 1(当前状态下从数字start开始搜索),cnt = 0(当前已经选取cnt个数字)。① 如果cnt == k,说明找到一个排列,加入答案;② 任意选取i∈[start→n]作为当前状态数字,cnt加一,下一步从i + 1开始递归搜索;③ 返回所有排列组成的答案。
代码:
#include <bits/stdc++.h>
using namespace std;
class Solution {
private:
vector<vector<int>> ans;
vector<int> res;
void DFS(int n, int k, int l, int cnt){
if(cnt == k){
ans.push_back(res);
return;
}
for(int i = l; i <= n; i++){
res.push_back(i);
DFS(n, k, i + 1, cnt + 1);
res.pop_back();
}
}
public:
vector<vector<int>> combine(int n, int k) {
ans.clear();
res.clear();
if(k <= 0 || k > n){
return ans;
}
DFS(n, k, 1, 0);
return ans;
}
};