Если вы ищете рекурсивный алгоритм, я думаю иметь рекурсивную функцию, которая добавляет '0'
или '1'
к строке, в зависимости от последнего символа строки.
Мое решение ниже вызываетрекурсия, пока длина строки не достигнет заданного значения n
. Его рекурсивные вызовы выполняются 1) путем добавления '0'
к строке и 2) путем добавления '1'
к строке, если предыдущий символ не является '1'
. Добавление '1'
только в том случае, если предыдущий символ не '1'
, не позволит строке содержать последовательные '1'
s. В худшем случае временная сложность будет 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");
}