[LeetCode] 77. Combinations Java
题目:
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], ]
题意及分析:给出一个n和k,要求求出由n中k个不同的数组成是序列,序列为升序排序。这道题要求所有可能的情况,显然我们可以使用回溯的方法求解,对于每次判断的边界条件为:后面的数要大于前面的数。而且由于这里1到n肯定是递增的,所以继续进行下一层运算的条件可以为 当前位置后面的数。具体看代码实现。
代码:
public class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> resList=new ArrayList<>(); List<Integer> list=new ArrayList<>(); backtracking(resList, list, 1, 1,n, k); return resList; } public void backtracking(List<List<Integer>> resList,List<Integer> list,int t,int start,int n, int k) { if(t>k){ resList.add(new ArrayList<>(list)); }else{ for(int i=start;i<=n;i++){ list.add(i); backtracking(resList, list, t+1,i+1, n, k); list.remove(list.size()-1); } } } }