代码之家  ›  专栏  ›  技术社区  ›  YourAboutMeIsBlank Daniel Delgado

从数组中打印对的唯一排列[闭合]

  •  -1
  • YourAboutMeIsBlank Daniel Delgado  · 技术社区  · 8 年前

    给定一个数组,打印出数组中所有非重复和非相同的对排列。数组不包含重复的元素。 如:

    String[] array = {"Cheese", "Pepperoni", "Black Olives", "Chicken"}
    

    期望示例输出:

    1. 奶酪、辣椒香肠
    2. 奶酪、黑橄榄
    3. 奶酪、鸡肉
    4. 黑橄榄、胡椒香肠 ...

    无效:

    1. 奶酪,奶酪
    2. 奶酪、辣椒香肠
      香肠、奶酪

    只有一对输入。[奶酪,意大利香肠]或[意大利香肠,奶酪]

    private Map<Integer, List<String>> getPairs(String[] array) {
            Map<Integer, List<String>> map = new HashMap<>();
            int count = 0;
    
            for (int i = 0; i < array.length; i++) {
                for (int j = 0; j < array.length; j++) {
                    if (i == j)
                        continue;
                    ArrayList<String> list = new ArrayList<>();
                    list.add(array[i]);
                    list.add(array[j]);
                    map.put(count, list);
                    ++count;
                }
            }
            // System.out.println(map);
            return map;
        }
    

    我的代码会打印出副本。你能帮忙吗。

    1 回复  |  直到 8 年前
        1
  •  4
  •   Andy Turner    8 年前

    将内部for循环声明更改为:

    for (int j = 0; j < array.length; j++) {
    

    for (int j = i + 1; j < array.length; j++) {
    

    提供以下要素 array 不包含重复项,这避免了“奶酪,奶酪”的情况(因为 j i 从来都不平等),以及“奶酪,辣椒香肠”和“辣椒香肠,奶酪”案 j 从不小于 .

    ( if (i == j) continue; 然后也是多余的)