Leetcode 77. 组合
题目:
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
解答:
回溯算法
Python:
1 class Solution: 2 def combine(self, n: int, k: int): 3 res=[] 4 cur=[] 5 self.recur(n,k,1,res,cur) 6 return res 7 def recur(self,n,k,cur_index,res,cur): 8 if len(cur)==k: 9 res.append(cur[:]) //注意深拷贝 10 return 11 for i in range(cur_index,n+1): 12 cur.append(i) 13 self.recur(n,k,i+1,res,cur) 14 cur.pop()
C++:
1 class Solution { 2 public: 3 vector<vector<int>> combine(int n, int k) { 4 vector<vector<int>> res; 5 vector<int> cur; 6 func(res,cur,1,n,k); 7 return res; 8 } 9 void func(vector<vector<int>>& res,vector<int>& cur,int nex,const int& n,const int& k){ 10 if(cur.size()==k){res.push_back(cur);return;} 11 if(n-nex+1<k-cur.size()){return;}//剪枝:剩下的数字全用上,数组长度也达不到K 12 if(nex<=n){ 13 cur.push_back(nex);//包含nex的 14 func(res,cur,nex+1,n,k); 15 cur.pop_back();//不包含nex 16 func(res,cur,nex+1,n,k); 17 } 18 } 19 };
进击的小🐴农