less than 1 minute read

https://leetcode.com/problems/combinations/

문제 : 전체 수 n을 입력받아 k개의 조합을 리턴하라

입력 : n=4, k=2 출력 : [[1,2,3], [1,2,4], [1,3,4], [2,3,5], [2,4,5], [3,4,5]]

  • 순서가 상관없으므로 [1,2,3]과 [1,3,2]가 같다.
  • n은 전체 수이고, k는 뽑을 갯수이다
import java.util.List;
import java.util.ArrayList;

class Solution {
    List<List<Integer>> result;
    public List<List<Integer>> combine(int n, int k) {
        result = new ArrayList<List<Integer>>();
        dfs(new ArrayList<>(), n, k);
        return result;
    }

    public void dfs(ArrayList<Integer> temp, int n, int k) {
        if(k == 0) { // k개를 다 뽑았으면 결과리스트에 추가
            result.add(temp);
        }
        for(int i=n; i>=k && k>0; --i) {
            ArrayList<Integer> t = new ArrayList<>(temp);
            t.add(i);
            dfs(t, i-1, k-1);
        }
    }
}