Using Bitmasking Algorithm to Compute the Combinations of an Arr
- 时间:2020-09-07 12:13:31
- 分类:网络文摘
- 阅读:150 次
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) —
推荐阅读:数学题:ABCD乘9等于DCBA,问ABCD各是数字几 数学题:乘积末尾有几个0 求解答:加工一批服装,每天加工300套,16天可以完成 数学题-这个工厂原有男工人多少名 开心“六一”之太阳岛之旅作文 橘子洲作文 关于奢侈 爱你在心口难开(24至25章) 吴志俨 珍惜生活的机会 美丽的青海作文
- 评论列表
-
- 添加评论