python找不同数字的个数_在Python中找到N个按位或等于K的不同数字

假设我们有两个整数N和K;我们必须找到N个唯一值,它们的按位或与K相同。如果没有这样的结果,则返回-1

因此,如果输入为N = 4且K = 6,则输出将为[6,0,1,2]。

为了解决这个问题,我们将遵循以下步骤-最大:= 32

已访问:=大小为MAX的列表,并用False填充

res:=一个新列表

定义一个功能add()。这将需要num

点:= 0

值:= 0

对于介于0到MAX的i,执行如果num AND 1非零,则

num:= num / 2(仅取整数部分)

值:=值+(2 ^ i)

进行下一次迭代如果visit [i]不为零,则

除此以外,

在res的末尾插入值

从主要方法中,执行以下操作-

pow2:=从2 ^ 0到2 ^ 31的2的幂的数组

在res的末尾插入k

cnt_k:= k中的位数

如果pow2 [cnt_k]

计数:= 0

对于范围0至pow2 [cnt_k]-1的i,执行从循环中出来

加(i)

数:=数+ 1

如果计数与n相同,则

返回资源

示例

让我们看下面的实现以更好地理解-MAX = 32

visited = [False for i in range(MAX)]

res = []

def set_bit_count(n):

if (n == 0):

return 0

else:

return (n & 1) + set_bit_count(n >> 1)

def add(num):

point = 0

value = 0

for i in range(MAX):

if (visited[i]):

continue

else:

if (num & 1):

value += (1 <

num = num//2

res.append(value)

def solve(n, k):

pow2 = [2**i for i in range(MAX)]

res.append(k)

cnt_k = set_bit_count(k)

if (pow2[cnt_k] 

return -1

count = 0

for i in range(pow2[cnt_k] - 1):

add(i)

count += 1

if (count == n):

break

return res

n = 4

k = 6

print(solve(n, k))

输入值4, 6

输出结果[6, 0, 1, 2]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值