在 Python 中查找 N 个按位或等于 K 的不同数字
pythonserver side programmingprogramming更新于 2025/10/10 21:00:17
假设我们有两个整数 N 和 K;我们必须找到 N 个按位或等于 K 的唯一值。如果没有这样的结果,则返回 -1
因此,如果输入为 N = 4 和 K = 6,则输出将为 [6,0,1,2]。
为了解决这个问题,我们将遵循以下步骤 −
MAX := 32
visited := 大小为 MAX 的列表并用 False 填充
res := 一个新列表
定义一个函数 add() 。这将需要 num
point := 0
value := 0
对于 i 在 0 到 MAX 范围内,执行
如果 accessed[i] 非零,则
进行下一次迭代
否则,
如果 num AND 1 非零,则
value := value +(2^i)
num := num/2(仅取整数)部分)
在 res 末尾插入值
从主方法中,执行以下操作 −
pow2 := 2^0 到 2^31 的 2 的幂数组
在 res 末尾插入 k
cnt_k := k 中的位数
if pow2[cnt_k] < n,则
返回 -1
count := 0
对于 i,范围从 0 到 pow2[cnt_k] - 1,执行
add(i)
count := count + 1
如果 count 与 n 相同,则
退出循环
返回 res
示例
让我们看看下面的实现以便更好地理解 −
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]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

