Предоставлено число d
и номер n
. Мне нужно распечатать все комбинации длины n
, так что первый элемент равен d
, а все остальные - 1 удаленность от предыдущей.Не получать правильные ожидаемые результаты
E.g. Для ввода d=4 n=3
Выход
4 3 2 4 3 4 4 5 4 4 5 6
Я написал следующий код, но он отображает каждую строку в два раза ниже -
4 3 2 4 3 2 4 3 4 4 3 4 4 5 4 4 5 4 4 5 6 4 5 6
код -
private static void printNumbers(int d, int n, String comb) {
if(n == 0) {
System.out.println(comb);
return;
}
printNumbers(d-1, n-1, comb+d+"\t");
printNumbers(d+1, n-1, comb+d+"\t");
}
и вызов метода выглядит -
printNumbers(4,3,"");
Я пытался отладки, но не смог придумать тест условия не дублированное выход. Я понимаю, что мы можем использовать Set
или подобные DS, чтобы избежать дубликатов, но мне интересно, есть ли решение без лишнего пространства.
Представьте, что вы находитесь в рекурсивном вызове и п = 1 расческа = «ххххх» и d = 2, например, Что будет делать функция printNumbers в этом случае? –
См. Описание вопроса, если 'n = 1'' comb' никогда не будет больше 1 в длину, и гребень всегда начинается с 'd' –
, что неверно ... так как ваша рекурсия уменьшает n и увеличивает длину гребня. . comb = "xxxx" означалось как заполнитель. как я сказал: представьте, что вы ** в ** рекурсии ... означает, что это не первоначальный вызов ... Во всяком случае .. мой вопрос был направлен на тот факт, что я не хотел представить вам ответ, скорее пусть вы обнаружите это для себя. Это точный пример, на который указывают принятые ответы. –