我找到了一个给出连续1的解决方案,但我找不到任何在二进制字符串中不包含连续1的东西,有人能帮我吗?
发布于 2019-10-13 05:01:34
以下是一种方法(在恰好是有效Python的伪代码中):
def gen(n):
if n == 0:
yield ''
return
for s in gen(n-1):
yield s + '0'
if s == '' or s[-1] == '0':
yield s + '1'
for s in gen(5):
print(s)它生成所有长度为n-1的字符串,然后:
0,以形成一个长度为1的有效字符串,但前提是它不会违反约束。发布于 2019-10-13 05:08:49
这里有一个简单的例子。
def f(n, result=""):
if n==0:
print(result)
return
if len(result) == 0 or result[-1]=="0":
f(n-1, result+"1")
f(n-1, result+"0")发布于 2019-10-13 05:23:39
如果你正在寻找一种递归算法,我正在考虑一个递归函数,它根据字符串的最后一个字符将'0'或'1'添加到字符串中。
我下面的解决方案调用递归,直到字符串的长度达到给定的n。它的递归调用是: 1)将'0'添加到字符串中;2)如果前一个字符不是'1',则将'1'添加到字符串中。仅当前一个字符不是'1'时才附加'1'将防止字符串包含连续的'1'。由于两次递归调用,最坏的情况是时间复杂度为O(2^n),空间复杂度为O( n ),因为递归深度将为n。
void printNDigitBinaries(int n) {
printBinHelper(n, "");
}
void printBinHelper(int n, String s) {
if (s.length() == n) {
System.out.println(s);
return;
}
printBinHelper(n, s+"0");
if (s.length() == 0 || s.charAt(s.length()-1) != '1') printBinHelper(n, s+"1");
}https://stackoverflow.com/questions/58358411
复制相似问题