題目:
給定兩個整數?n
?和?k
,返回范圍?[1, n]
?中所有可能的?k
?個數的組合。
你可以按?任何順序?返回答案。
方法:靈神-組合型回溯 剪枝
class Solution {private int k;private final List<Integer> path = new ArrayList<>();private final List<List<Integer>> ans = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {this.k = k;dfs(n);return ans;}private void dfs(int i) {int d = k - path.size(); // 還要選d個數if (d == 0) {ans.add(new ArrayList<>(path));return;}if (d < i) // 不選idfs(i - 1);// 選ipath.add(i);dfs(i - 1);path.remove(path.size() - 1);}
}