77. Combinations(回溯)
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
Example:
Input: n = 4, k = 2 Output: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
class Solution: def combine(self, n: int, k: int) -> List[List[int]]: res = [] def backtrack(path,index): if len(path) > k: return if len(path) == k: res.append(path.copy()) return for i in range(index,n+1): backtrack(path+[i],i+1) backtrack([],1) return res
class Solution { public: vector<vector<int>> res; void dfs(vector<int>& path, int n, int k, int level) { if (path.size() == k) { res.emplace_back(path); return; } for (int i = level; i <= n; i++) { path.emplace_back(i); dfs(path,n,k,i+1); path.pop_back(); } } vector<vector<int>> combine(int n, int k) { vector<int> path; dfs(path,n,k,1); return res; } };
class Solution { public: vector<vector<int>> res; vector<int> path; void backtrack(vector<int>& path, int k ,int n,int start) { if (k == path.size()) { res.push_back(path); return; } int fake_n = n - (k - path.size()) + 1; //int fake_n = n; for (int i = start; i<= fake_n; ++i) { path.push_back(i); backtrack(path,k,n,i+1); path.pop_back(); } } vector<vector<int>> combine(int n, int k) { vector<int> path; backtrack(path,k,n,1); return res; } };
1 class Solution { 2 List<List<Integer>> res = new ArrayList<>(); 3 public List<List<Integer>> combine(int n, int k) { 4 List<Integer> temp = new ArrayList<Integer>(); 5 help(temp,n,k,1); 6 return res; 7 8 } 9 private void help(List<Integer> temp,int n ,int k ,int index){ 10 if(k==0){ 11 res.add(new ArrayList<Integer>(temp)); 12 } 13 for(int i = index;i<=n;i++){ 14 temp.add(i); 15 help(temp,n,k-1,i+1); 16 temp.remove(temp.size()-1); 17 } 18 } 19 }