Using Bitmasking Algorithm to Compute the Combinations of an Arr
- 时间:2020-09-07 12:13:31
- 分类:网络文摘
- 阅读:139 次
Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
Example:
Input: n = 4, k = 2 Output: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
Combination Algorithm using Bitmasking
The combination can also be done in Recursive backtracking. However, it can also be implemented using the Bitmasking algorithm.
The idea is to bruteforce all possible configurations (of bitmasks) in O(2^N) where N is the length of the given input set. Then once the configuration has k bit sets, we output the corresponding configuration.
The following is the Python combination implementation using bitmasking.
1 2 3 4 5 6 7 8 9 10 11 | class Solution: def combine(self, n: int, k: int) -> List[List[int]]: ans = [] for b in (range(1 << n)): if bin(b).count('1') == k: cur = [] for i in range(n): if (b & (1 << i)) > 0: cur.append(i + 1) ans.append(cur) return ans |
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
ans = []
for b in (range(1 << n)):
if bin(b).count('1') == k:
cur = []
for i in range(n):
if (b & (1 << i)) > 0:
cur.append(i + 1)
ans.append(cur)
return ansand with slight changes – reversing the bit searching – still works
1 2 3 4 5 6 7 8 9 10 11 | class Solution: def combine(self, n: int, k: int) -> List[List[int]]: ans = [] for b in reversed(range(1 << n)): if bin(b).count('1') == k: cur = [] for i in range(n): if (b & (1 << (n - i - 1))) > 0: cur.append(i + 1) ans.append(cur) return ans |
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
ans = []
for b in reversed(range(1 << n)):
if bin(b).count('1') == k:
cur = []
for i in range(n):
if (b & (1 << (n - i - 1))) > 0:
cur.append(i + 1)
ans.append(cur)
return ansThe recursive algorithm in C++: Recursive Combination Algorithm Implementation in C++.
Also, another interesting read: combination
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:The Intersection Algorithm of Two Arrays using Hash Maps in C++/ What Businesses Would Be Like if Web Hosting Didn’t Exist? How to Find the Dominant Index in Array (Largest Number At Least K Closest Points to Origin Algorithm by using Priority Queues in Total Number of Ways to Decode the Message via Dynamic Programmi The License Key Formatting Algorithm in C++ Integrating LinkedIn Long-Form Posts in Your Blogging Strategy A Quick Guide on Beefing Up Your WordPress Security 10 Proven Ways to Destroy Writer’s Block 3 Chrome Blogging Extensions to Watch Out for 2015
- 评论列表
-
- 添加评论