Leetcode OJ 77 Combinations [Medium]
题目描述:
Given two integers nand 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,返回所有的k个数字的组合,k个数字是1,2……n。
测试用例:
功能测试:n>0,n>k;
边界测试:n=0,k=0;n>0,k=0;n<k;
分析:
递归:
1. K个数字组合 = 第1个数字,组合上后面k-1个数字组合;k-1个数字组合 = 组合的第1个数字,组合上,后面k-2个数字组合;……
2. 以第1个数字作为开始组合完后,再以第二个数字作为开始组合,直到以最后一个数字作为组合开始(如果存在的话);
解答:
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
combineRecursion(result, new ArrayList<Integer>(),1,n,k);
return result;
}
static public void combineRecursion(List<List<Integer>> result,List<Integer> comb,int start,int end,int k){
if(k == 0){
result.add(new ArrayList<>(comb));
return;
}
else{
for(int i = start; i<=end; i++){
comb.add(i);
combineRecursion(result,comb,i+1,end,k-1);
comb.remove(comb.size()-1);
}
}
}
}