77. Combinations
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], ]
---
YC 10/20 version
public class Solution { public ArrayList<ArrayList<Integer>> combine(int n, int k) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> list = new ArrayList<Integer>(); helper(n, k, 0, rst, list); return rst; } private void helper(int n, int k, int index, ArrayList<ArrayList<Integer>> rst, ArrayList<Integer> list){ if(list.size() == k){ ArrayList<Integer> l = new ArrayList<Integer>(list); rst.add(l); return; } for(int i=index+1; i<=n; i++){ list.add(i); helper(n, k, i, rst, list); list.remove(list.size()-1); } } }
public class Solution { public ArrayList<ArrayList<Integer>> combine(int n, int k) { if(n<k) return null; ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); if(k==1){ // Base case for(int i=1;i<=n;i++){ ArrayList<Integer> list = new ArrayList<Integer>(); list.add(i); rst.add(list); } return rst; } // recursive for(int i=n;i>=k;i--){ for(ArrayList<Integer> list : combine(i-1,k-1)){ list.add(i); rst.add(list); } } return rst; } }
浙公网安备 33010602011771号