alorithm/programmers

[LeetCode] Subsets

Hannana. 2024. 8. 13. 01:35
728x90
반응형

https://leetcode.com/problems/subsets/description/

문제 파악

주어진 배열에서 나올 수 있는 subset 모두 구하기(조합)

  • 1 <= nums.length <= 10
  • 10 <= nums[i] <= 10
  • All the numbers of nums are unique.

접근 방법

💡 -combination으로 순서가 없는 리스트를 담아 최종 result에 적재

-”combinations” 문제와 흡사

-조건 걸지 않고 조합 만들어지는대로(길이n) 결과로 반환하는 것이 포인트

 

코드 구현

import java.util.*;
class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> curr = new ArrayList<>();
        
        backtrack(0,result,curr,nums);
        return result;
    }
    public void backtrack(int start,List<List<Integer>> result,List<Integer> curr,int[] nums){
        result.add(new ArrayList<>(curr));
        //base case
        //if(curr.size()>nums.length){
        //    return;
        //}
        //recursive call
        for(int i=start;i<nums.length;i++){
            if(curr.contains(nums[i])) continue;
            curr.add(nums[i]);
            backtrack(i+1,result,curr,nums);
            curr.remove(curr.size()-1);

        }
    }
}

배우게 된 점

-담아야 하는 리스트 길이 제한 없이(배열 요소 반드시 포함X) n개의 리스트를 모두 경우의 수로 구해서 담기 때문에 base case구문을 생략해도 OK

-start 인덱스는 시작일 뿐, 재귀 호출 시 새로 갱신해서 호출해주므로 변수 할당 굳이 안해도 괜찮다.

 

 

 

반응형