在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 = 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中找到N个按位或等于K的不同数字 的全部内容, 来源链接: utcz.com/z/321868.html

    回到顶部