在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,执行
如果numAND1非零,则
num:=num/2(仅取整数部分)
值:=值+(2^i)
进行下一次迭代
如果visit[i]不为零,则
除此以外,
在res的末尾插入值
从主要方法中,执行以下操作-
pow2:=从2^0到2^31的2的幂的数组
在res的末尾插入k
cnt_k:=k中的位数
如果pow2[cnt_k]<n,则
返回-1
计数:=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 << i) 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] < n): 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]