У меня есть какой то массив со словами, который я сортирую по длине. Хочу сделать так, что бы на выходе он выдавал все возможные перестановки. Что я имею ввиду:
1) Дано String[] tst = {"H","G","HHHhh","HGFD"}
2) Что могу пока = {"H","G","HGFD","HHHhh"} - сортировка по длине
3) Хочу получить = {"H","G","HGFD","HHHhh"} - Первый ответ
= {"G","H","HGFD","HHHhh"} - Второй ответ
Как мне лучше подойти к этой проблеме ? С чего начать ?
public class Tetst {
public static void main(String[] args){
String[] strArray = {"Agar", "Hefo", "Baraa", "aaa", "baaalbal"};
for(int i = 0; i < strArray.length; i++){
for(int j = 0; j < strArray.length - 1 - i; j++){
if(strArray[j].length() > strArray[j + 1].length()){
String str = strArray[j];
strArray[j] = strArray[j + 1];
strArray[j + 1] = str;
}
}
}
for(String s : strArray){
System.out.println(s);
}
}
}
Начните с подхода в лоб. У вас есть N элементов. Это значит на первом месте у вас может быть любой из них. На втором - любой из них, кроме того, что сейчас стоит на первом месте. На третьем любой из них, кроме двух, которые попали на 1 и 2 место. Первое что просится - рекурсивная функция. Она принимает в себя набор всех значений и текущий набор, длинной меньше или равной общему.
f(all, current){
if(all.size == current.size){
print(current);
return;
}
for(o in all){
current.add(o);
f(all.current);
current.remove(o);
}
}
Раз уж вы ставите вопрос "с чего начать" - предположу что вы хотите все же сами решить задачу, потому остановлюсь на этом недоалгоритме на недоязыке. Оставлю вам на подумать вопросы допустимости прибавления o к current, запуска алгоритма, сохранения результатов и еще чего-нибудь
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости