Background
Hari ini aku belajar mengenai bit manipulation menggunakan Python. soal yang aku selesaikan menggunakan bit manipulation adalah soal dengan ID 78 Subsets.
Idea
Pada soal ini kita diminta untuk menghasilkan semua subset dari sebuah array. dan cara yang aku gunakan untuk menyelesaikan-nya seperti berikut:
- Hitung jumlah total subset yang mungkin dari array, yaitu
2^n, dimananadalah panjang array. - Gunakan loop untuk menghasilkan semua subset dengan menggunakan bitmask
- Untuk setiap bitmask, periksa setiap bit untuk menentukan elemen mana yang masuk ke subset.
- Bitmask merepresentasikan satu subset. Misalnya untuk array dengan panjang
3, bitmask101berarti elemen indeks0dan2dipilih, sedangkan elemen indeks1tidak dipilih. - Gunakan loop dari indeks
0sampain - 1untuk mengecek setiap posisi bit. - Untuk mengecek bit ke-
i, gunakan operasimask & (1 << i). 1 << imembuat angka dengan hanya bit ke-ibernilai1. Contohnya1 << 2menghasilkan biner100.- Jika hasil
mask & (1 << i)bukan0, berarti bit ke-ipadamaskbernilai1, sehingganums[i]dimasukkan ke dalam subset. - Jika hasilnya
0, berarti bit ke-ibernilai0, sehingganums[i]tidak dimasukkan ke dalam subset.
- Bitmask merepresentasikan satu subset. Misalnya untuk array dengan panjang
- Tambahkan subset yang dihasilkan ke dalam daftar hasil.
Example Code
class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: n = len(nums) total = 1 << n result = [] for mask in range(total): subset = [] for i in range(n): if mask & (1 << i): subset.append(nums[i]) result.append(subset) return result
