给定两个整数
n
和k
,返回范围[1, n]
中所有可能的k
个数的组合。你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
示例 2:输入:n = 1, k = 1
输出:[[1]]
提示:
1 <= n <= 20
1 <= k <= n来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combinations
回溯组合问题 执行用时:14ms,在所有Java提交中击败了61.06%的用户 内存消耗:39.7MB,在所有Java提交中击败了55.02%的用户
package 字符串.回溯;
import org.junit.Test;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class 组合_77 {
/*
回溯组合问题
执行用时:14ms,在所有Java提交中击败了61.06%的用户
内存消耗:39.7MB,在所有Java提交中击败了55.02%的用户
*/
static ArrayList<List<Integer>> list = new ArrayList<>();
static LinkedList<Integer> linkedList = new LinkedList<>();
static void backtracking(int n,int k,int startIndex){
if (linkedList.size()==k) {
list.add((new ArrayList<>(linkedList)));
System.out.println(list);
return;
}
for (int i = startIndex; i <=n; i++) {
linkedList.add(i);
backtracking(n,k,i+1);
linkedList.removeLast();
}
}
static List<List<Integer>> combine(int n, int k) {
backtracking(n,k,1);
return list;
}
public static void main(String[] args) {
System.out.println(combine(4,2));
}
}