Я знаю, что это вопрос, который часто задавался здесь, и есть много примеров в Интернете, но я не нашел такой, который соответствует моему вопросу.
Мне нужно написать код, который получит строку и напечатает все различные подпоследовательности в порядке их появления в слове. Решение должно иметь только рекурсивный метод (методы), без циклов вообще. (должно основываться на рекурсии с возвратом назад и только массивах или подстроках) "," 02 "," 012 "
сначала я собирался что-то вроде этого:
public static void printSubs(String s) {
printSubsSol(s, "");
}
private static void printSubsSol(String s, String temp) {
if (s.length()==0) {
System.out.print(temp+" ");
return;
}
printSubsSol(s.substring(1), temp);
printSubsSol(s.substring(1),temp+s.charAt(0));
}
Отпечатки: 2 1 12 0 02 01 012
Я не смог напечатать все подпоследовательности в правильном порядке, поэтому теперь я попробовал другой подход с использованием массива char, который с моим чуть более успешным задом, я не еще нет
public class Ex9Q2V4 {
public static void printSubs(String s) {
char[] tempArr = new char[s.length() - 1];
printSubsSol(s, 0, 0, tempArr, 1);
System.out.println('"' + s + '"');
}
private static boolean isSafe(int arrayIndex, int currentIndex, int howMuchToPrint, int length) {
return (arrayIndex < howMuchToPrint && arrayIndex <= currentIndex && currentIndex < length);
}
private static void printSubsSol(String s, int arrayIndex, int currentIndex, char[] charArr, int howMuchToPrint) {
if (howMuchToPrint == s.length()) {
return;
}
charArr[arrayIndex] = s.charAt(currentIndex);
if (arrayIndex == howMuchToPrint - 1) {
System.out.print("\"");
printArray(charArr, howMuchToPrint);
System.out.print("\"" + ", ");
}
if (isSafe(arrayIndex + 1, currentIndex + 1, howMuchToPrint, s.length())) {
printSubsSol(s, arrayIndex + 1, currentIndex + 1, charArr, howMuchToPrint);
}
else if (isSafe(arrayIndex, currentIndex + 1, howMuchToPrint, s.length())) {
printSubsSol(s, arrayIndex, currentIndex + 1, charArr, howMuchToPrint);
}
else printSubsSol(s, 0, 0, charArr, howMuchToPrint + 1);
}
// A method that prints the array
private static void printArray(char arr[], int n) {
if (n != 0) {
printArray(arr, n - 1);
System.out.print(arr[n - 1]);
}
}
}
Печать: «0», «1», «2», «01», «02», «12», «012»
Если возможно, я буду рад видеть решение обоими способами.