미리수얌 블로그

Leetcode: Subsets 본문

코딩문제풀이/Leetcode

Leetcode: Subsets

미리수얌 2018. 9. 25. 14:27

Subsets

주어진 배열로 (배열에 있는 숫자들은 모두 unique 함) 만들수 있는 모든 subset을 만들어라.
이 문제는 Bit 로 풀 수 있는데요.
주어진 배열이 31 초과 하지 않으면 가능합니다.
Bit 를 생각해보면 000000 아무것도 넣지 않기
000001 맨 마지막 숫자로만 이루어진 subset
000010 끝에서 두번째 숫자만으로 이루어진 subset
000011 마지막 두개의 숫자로 이루어진 subset
.
.
.
111111 모든 걸 포함하는 subset 으로 만들어지는 것을 알 수 있습니다.

public List<List<Integer>> subsets(int[] nums) {
    List<List<Integer>> subsets = new LinkedList<>();
    int limit = 1 << nums.length;
    for (int i = 0; i < limit; ++i) {
        int t = i;
        int ind = 0;
        List<Integer> tmp = new LinkedList<>();
        while (t > 0) {
            if ((t & 1) == 1) {
                tmp.add(nums[ind]);
            }
            ind++;
            t >>>= 1;
        }
        subsets.add(tmp);
    }
    return subsets;
}
Comments