原题网址:https://leetcode.com/problems/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], ]
方法:深度优先搜索。
public class Solution {
private List<List<Integer>> result = new ArrayList<>();
private void find(List<Integer> nums, int n, int left) {
if (left == 0) {
List<Integer> r = new ArrayList<>();
r.addAll(nums);
result.add(r);
return;
}
int min = 0;
if (nums.size() > 0) min = nums.get(nums.size()-1);
for(int i=min+1; i<=n-left+1; i++) {
nums.add(i);
find(nums, n, left-1);
nums.remove(nums.size()-1);
}
}
public List<List<Integer>> combine(int n, int k) {
find(new ArrayList<>(), n, k);
return result;
}
}

本文针对LeetCode上的一道经典题目——求出从1到n的所有可能的k个数的组合,提供了一种深度优先搜索的解决方案。通过递归的方式,逐步构建起每个可能的组合,并最终返回所有组合的列表。
&spm=1001.2101.3001.5002&articleId=51473494&d=1&t=3&u=620c229599414d159463bb83dd376a21)
1430

被折叠的 条评论
为什么被折叠?



