在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] <n,则 
- 返回-1 
- 计数:= 0 
- 对于范围0至pow2 [cnt_k]-1的i,执行 
- 从循环中出来 
- 加(i) 
- 数:=数+ 1 
- 如果计数与n相同,则 
- 返回资源 
示例
让我们看下面的实现以更好地理解-
MAX = 32visited = [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]
以上是 在Python中找到N个按位或等于K的不同数字 的全部内容, 来源链接: utcz.com/z/321868.html





