77.组合(简单) 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例: 输入: n = 4, k = 2
输出:
1 2 3 4 5 6 7 8 [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/combinations
思路: 回溯
代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> ans = new ArrayList<>(); dfs(new ArrayList<>(),ans,1 ,n,k); return ans; } void dfs (List<Integer> list,List<List<Integer>> ans,int start,int n,int k) { if (k==0 ){ ans.add(new ArrayList<>(list)); return ; } for (int i=start;i<=n-k+1 ;i++){ list.add(i); dfs(list,ans,i+1 ,n,k-1 ); list.remove(list.size()-1 ); } } }
新代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class Solution { List<List<Integer>> res = new ArrayList<>(); List<Integer> list = new ArrayList<>(); public List<List<Integer>> combine(int n, int k) { backtrack(n,k,1 ); return res; } public void backtrack (int n,int k,int start) { if (list.size()==k){ res.add(new ArrayList<>(list)); return ; } for (int i = start;i<=n;i++){ list.add(i); backtrack(n,k,i+1 ); list.remove(list.size()-1 ); } } }