Возможные перестановки по длине

356
10 августа 2021, 23:40

У меня есть какой то массив со словами, который я сортирую по длине. Хочу сделать так, что бы на выходе он выдавал все возможные перестановки. Что я имею ввиду:

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);
        }
    }

}
Answer 1

Начните с подхода в лоб. У вас есть 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, запуска алгоритма, сохранения результатов и еще чего-нибудь

READ ALSO
Тормозит автотест

Тормозит автотест

Занимаюсь написанием автотестовНедавно стал очень сильно тормозить (работает по 3, 9, 49 минут, в зависимости от тестового стенда, когда раньше...

273
Передать данные из Popup в НЕвызывающую Активити. Как грамотно организовать?

Передать данные из Popup в НЕвызывающую Активити. Как грамотно организовать?

Есть Activity0, в которой создается обьект созданного мной класса (ToggleValues)Этот обьект настраивает всплывающее окно с EditText, кнопками OK и CANCEL, и запускает...

155
как написать регулярное выражение для номера

как написать регулярное выражение для номера

как написать выражение для поиска номера телефона в котором содержаться знаки "-" но не более 2 раз +5845654-20-20 true +5845654-20-20-1 false

235
Ошибка при generate-signed-apk

Ошибка при generate-signed-apk

Если я последую советам, то все apk создатьсяНо что это за ошибка? Из-за чего? Какие могут быть последствия?

371