📅  最后修改于: 2023-12-03 14:58:33.899000             🧑  作者: Mango
在这道题目中,我们需要使用两个整数 N
和 K
,和一个二进制数组 bits
,来找到一个恰好为 K
位 1 的 N 位二进制数,并且在任何相邻的 两个 1 之间有一个 0。
在这个问题中,我们可以使用一个非常简单的解决方案来得到所需的二进制数。
我们可以首先处理两个特殊的情况——当 K
为 0 或 1 时,我们可以直接将其作为输出返回,此时数组 bits
中的任何元素都不重要。
否则,如果 bits
中的第一个元素为 1,则我们需要在输出的二进制数字的第一位上添加 0。同样的,如果 bits
中最后一个元素为 1,则在输出的二进制数的最后一位上添加 0。
这是因为,按照题意,在任何相邻的 两个 1 之间必须有一个 0,而在上述特殊情况下,我们已经打破了相邻两个 1,所以需要在第一位或最后一位上添加一个 0。
接下来,我们仅需将剩余的 K-2
位 1 插入到二进制中的空隙中即可。因为有了问题中的性质——相邻两个 1 之间必须有一个 0,我们,所以我们可以将 K-2
个 1 均匀地插入到 N-2
个空隙中即可。
需要注意的一点是,当 K-2
不能完全均匀地插入到 N-2
个空隙中时,我们需要在最后一个 1 之前的所有空隙中插入一个 1。
接下来是 Python 代码实现:
class Solution:
def kthGrammar(self, N: int, K: int, bits: List[int]) -> int:
if K == 1:
return 0
if K == 2:
return 1
if bits[0] == 1:
K -= 1
if bits[-1] == 1:
K -= 1
return bin(K - 1)[2:].count('1') % 2
这里,我们用了一个少数派真言——二进制中 1 的数量比特数模 2 后的结果相同,来计算返回的值。
所以,我们只需要计算插入后还剩下的 1 的个数,对 2 取模,就是所需的 0/1 值了。