题目描述
题解
java
import java.util.*;
public class Leetcode_77 {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> ret = new ArrayList<List<Integer>>();
if(n<=0||k<=0||k>n)
return ret;
ArrayList<Integer> p = new ArrayList<Integer>();
findCombine(n,k,1,p,ret);
return ret;
}
private void findCombine(int n, int k, int start, List<Integer> c,List<List<Integer>> ret)
{
if(c.size() == k)
{
ret.add(new ArrayList<>(c));
return;
}
for(int i = start; i<=n; i++)
{
c.add(i);
findCombine(n,k,i+1,c, ret);
System.out.println(c.toString());
c.remove(c.size()-1);
}
}
public static void main(String[] args)
{
Leetcode_77 a = new Leetcode_77();
List<List<Integer>> ret = a.combine(4,2);
System.out.print(ret.toString());
}
}
cPP
class Solution {
private:
vector<vector<int>> res;
void generateCombinations(int n, int k, int start, vector<int> &c)
{
if(c.size() == k)
{
res.push_back(c);
return;
}
for(int i = start;i<=n;i++){
c.push_back(i);
generateCombinations(n,k,i+1,c);
c.pop_back();
}
return;
}
public:
vector<vector<int>> combine(int n, int k) {
res.clear();
if(n <= 0 || k<=0 || k>n)
return res;
vector<int> c;
generateCombinations(n,k,1,c);
return res;
}
};
代码优化
import java.util.*;
public class Leetcode_77 {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> ret = new ArrayList<List<Integer>>();
if(n<=0||k<=0||k>n)
return ret;
ArrayList<Integer> p = new ArrayList<Integer>();
findCombine(n,k,1,p,ret);
return ret;
}
private void findCombine(int n, int k, int start, List<Integer> c,List<List<Integer>> ret)
{
if(c.size() == k)
{
ret.add(new ArrayList<>(c));
return;
}
for(int i = start; i<=n-(k-c.size())+1; i++)
{
c.add(i);
findCombine(n,k,i+1,c, ret);
System.out.println(c.toString());
c.remove(c.size()-1);
}
}
public static void main(String[] args)
{
Leetcode_77 a = new Leetcode_77();
List<List<Integer>> ret = a.combine(10,8);
System.out.print(ret.toString());
}
}