📅  最后修改于: 2023-12-03 15:10:50.376000             🧑  作者: Mango
在写代码时,需要检查给定的二进制字符串中是否包含了0到N的所有二进制表示。下面是一份示例代码,用于实现这个功能。
def is_binary_substring(binary_string, n):
for i in range(n+1):
binary = bin(i)[2:]
if binary not in binary_string:
return False
return True
function isBinarySubstring(binaryString, n) {
for (let i = 0; i <= n; i++) {
const binary = i.toString(2);
if (!binaryString.includes(binary)) {
return false;
}
}
return true;
}
>>> binary_string = "110011000111"
>>> n = 6
>>> is_binary_substring(binary_string, n)
True
const binaryString = "110011000111";
const n = 6;
console.log(isBinarySubstring(binaryString, n)); // true
上述算法的时间复杂度为 $O(n^2)$,其中 $n$ 是 $N$ 的二进制表示的位数。因为要遍历从 0 到 $N$ 的所有整数,并检查它们的二进制表示是否出现在给定的字符串中。
空间复杂度取决于存储所有二进制表示的字符串需要多少内存。在最坏情况下,当 $N$ 等于 $2^k -1$ 时,需要存储 $k$ 个二进制字符串,空间复杂度为 $O(k)$。在最好情况下,当 $N=1$ 时,只需要存储一个二进制字符串,空间复杂度为 $O(1)$。