如何修改以下回溯代码,该代码用于显示N位二进制数到显示二进制数的所有组合,这些二进制数没有连续的1' 例: 输入:N = 2 输出:3 // 3个字符串是00,01,10
输入:N = 3 输出:5 // 5个字符串是000,001,010,100,101
#include <stdio.h>
char target[100];
void foo(int size, int count)
{
if (count > size)
return;
if (count == size) {
target[count] = '\0';
printf("%s\n", target);
return;
}
if (count < size) {
target[count] = '1';
foo(size, count+1);
}
target[count] = '0';
foo(size, count+1);
}
int main()
{
int n = 3;
foo(n, 0);
return 0;
}
答案 0 :(得分:1)
如果前一个位置也是'1',请不要放置'1'。例如:
if (count == 0 || target[count-1] != '1') {
target[count] = '1';
foo(size, count+1);
}