Java - Все перестановки и комбинации в данной строке - PullRequest
0 голосов
/ 13 января 2020

Я хочу получить все перестановки и комбинации в данной строке. Я попробовал следующий код.

import java.util.ArrayList;
import java.util.List;

public class ProblemStatement {

    public static void main(String[] args) {

        String[] arr = new String[] {"nokia", "htc", "apple", "samsung","mi"};

        List<String> totalCombinations = getCombinations(arr);

        for(String s : totalCombinations){
            System.out.println(s);
        }


    }

    public static List<String> getCombinations(String[] arr){


        List<String> combinations = new ArrayList<String>();

        for(int i=0; i <arr.length ; i++){

            if(i > 0){
                String temp = arr[i];
                arr[i] = arr[0];
                arr[0] = temp;              
            }
            for(int k=0; k==0 ; k++){

                for(int j=1 ; j<arr.length ; j++){
                    String combination = arr[k] + ":" + arr[j];
                    combinations.add(combination);
                }
            }

        }   
        return combinations;
    }

}

Output:
nokia:htc
nokia:apple
nokia:samsung
nokia:mi
htc:nokia
htc:apple
htc:samsung
htc:mi
apple:nokia
apple:htc
apple:samsung
apple:mi
samsung:nokia
samsung:htc
samsung:apple
samsung:mi
mi:nokia
mi:htc
mi:apple
mi:samsung

Согласно этой логике c, я вижу повторяющиеся комбинации. (Пример: Nokia: HT c & HT c: Nokia). Мне не нужны повторные комбинации. Наряду с этим, как я могу получить все перестановки для данного массива строк. Любая помощь будет принята с благодарностью.
Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 13 января 2020

для комбинированной части ваш код должен выглядеть так:

public static List<String> getCombinations(String[] arr){


    List<String> combinations = new ArrayList<String>();

    for(int i=0; i <arr.length ; i++){
            for(int j = i+1; j < arr.length ; j++) {
                String combination = arr[i] + ":" + arr[j];
                combinations.add(combination);
            }

        }
    return combinations;
}

, но я не понимаю, что вы хотите от перестановок. Потому что в перестановках вы получаете дубликаты и элементы, которые явно повторяются. так оно и есть.

0 голосов
/ 13 января 2020

Пожалуйста, попробуйте обновленную функцию getCombination (String [] arr), как показано ниже, чтобы избежать дублирования комбинаций:

public static List<String> getCombinations(String[] arr){


        List<String> combinations = new ArrayList<String>();

        for(int i=0; i <arr.length-1 ; i++){

            for(int j=i+1; j<arr.length; j++){
                String combination = arr[i] + ":" + arr[j];
                combinations.add(combination);
            }

        }
        return combinations;
    }
...