题目描述:
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
链接:https://leetcode-cn.com/problems/combinations/description/
思路:将一个n-bit的数中为1的位置加入一个列表则构成一个组合,比如1001构成的组合为[1,4],按照这个思路可以遍历0到2的n次幂中的所有数,计算其bit中含1的数量,如果等于k,则将其转化成一个组合加入列表,最后返回该列表即可。
代码:
from math import pow
class Solution:
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
ans = []
countofone = []
end = pow(2,n)
for i in range(0,int(end)):
res = []
if i == 0:
countofone.append(0)
else:
countofone.append(countofone[i & i - 1] + 1)
if countofone[i] == k:
num = i
pos = 1
while num > 0:
a = num % 2
if a == 1:
res.append(pos)
num = num // 2
pos = pos + 1
ans.append(res)
return ans
提交记录: