Ввод: строка слова. Печатает все перестановки данной строки без повторения. ЯВА - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь реализовать это на Java, но не знаю как. Есть предложения?

Примеры.

ввод:

abc

вывод:

abc
acb
bac
bca
cab
cba

ввод:

aab

вывод:

aab
aba
baa

1 Ответ

0 голосов
/ 18 октября 2019

Это был самый простой способ, который я мог придумать

 String str= "abc";
            ArrayList<String> letters = new ArrayList<String>();
            HashSet<String> combinations = new HashSet<String>();
            for(int i = 0; i<str.length();i++) {
//Break String into letters
                letters.add(str.substring(i,i+1));
            }
            for(int i = (str.length()*2)+1;i>0;i--) {
//Will loop through maximum possible outcomes
                String result = "";
                String bin = Integer.toBinaryString(i);
//System.out.println(bin);
                while(bin.length()<3) {
                    bin="0"+bin;
                }
                for(int b = bin.length();b>0;b--) {
                    if(bin.substring(b-1,b).equals("1"))result = result.concat(letters.get(b-1));
                }
                for(int b = bin.length();b>0;b--) {
                    if(bin.substring(b-1,b).equals("0"))result = result.concat(letters.get(b-1));
                }
                combinations.add(result);
            }
            System.out.println(str);
            for(String c : combinations) {
                System.out.println(c);
            }

Он использует двоичный файл для циклического перебора массива исходной строки, а затем добавляет результат в хеш-набор для удаления дубликатов

...