Интересует оптимальное рекурсивное решение задачки. У самого только кривой код, который кучу памяти жрет.
package com.javarush.task.task03.task0313;
import java.util.ArrayList;
/*
Мама мыла раму
*/
public class Solution {
public static void main(String[] args) {
ArrayList<String> strings = new ArrayList<String>();
strings.add("Мама");
strings.add("Мыла");
strings.add("Раму");
transposition("", strings); // хорошо бы не передавать сюда пустую строку, и не создавать отдельный метод с начальными аргументами
}
public static void transposition(String word, ArrayList<String> arr) {
if(arr.size() == 1)
System.out.println(word + arr.get(0));
for(int i = 0; i < arr.size(); i++) {
String wr = word + arr.get(i);
ArrayList<String> copy = (ArrayList<String>)arr.clone();
copy.remove(i);
transposition(wr, copy);
}
}
}