#java
#Ява
Вопрос:
Я пытаюсь распечатать все возможные поддиапазоны из списка define. Для этого я использую приведенный ниже код
static void printSubArray(int arr[]) { int n = arr.length; for (int i = 0; i lt; n; i ) { for (int j = i; j lt; n; j ) { for (int k = i; k lt;= j; k ) { System.out.print(arr[k] " "); } System.out.println(); } } }
Попробовал приведенный выше код, некоторые расширяют его работу, но не печатают весь возможный массив. Например, пожалуйста, найдите ниже пример:
Ввод:: int a[] = { 1, 2, 3 };
Выход::
1 1 2 1 2 3 2 2 3 3
Как мы видим на выходных данных, в некоторых подмассивах отсутствует 1, 3.
Может ли кто-нибудь, пожалуйста, помочь в этом
Ответ №1:
Таким образом, текущий номер должен быть напечатан в его строке, затем он исключается, и печатаются все следующие номера, при этом текущий номер передается в качестве префикса для включения в дальнейшие печати.
Количество наборов равно 2 n — 1, где n
-длина входного массива.
Таким образом, может быть разработано следующее рекурсивное решение:
static void printSubArray(int ... arr) { printSubArray("", -1, arr); } static void printSubArray(String prefix, int ix, int ... arr) { for (int i = ix 1; i lt; arr.length; i ) { System.out.println(prefix arr[i]); printSubArray(prefix arr[i] " ", i, arr); } }
Для ввода printSubArray(1, 2, 3)
он печатает:
1 1 2 1 2 3 1 3 2 2 3 3
Для ввода printSubArray(1, 2, 3, 4)
он печатает:
1 1 2 1 2 3 1 2 3 4 1 2 4 1 3 1 3 4 1 4 2 2 3 2 3 4 2 4 3 3 4 4