从数组中打印对的唯一排列

时间:2016-03-01 21:57:19

标签: java algorithm permutation

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

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

期望的示例输出:

  1. 奶酪,意大利辣味香肠
  2. 奶酪,黑橄榄
  3. 奶酪,鸡肉
  4. 黑橄榄,意大利辣味香肠 ...
  5. 无效:

    1. 奶酪,奶酪
    2. 奶酪,意大利辣香肠
      意大利辣香肠,奶酪
    3. 只有一对输入。 [奶酪,意大利辣香肠]或[意大利辣香肠,奶酪]

      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 个答案:

答案 0 :(得分:4)

从以下内容更改内部for循环声明:

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

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

如果array的元素不含重复,则可以避免奶酪,奶酪和#34; case(因为ji永远不相等),以及&#34; Cheese,Pepperoni&#34;和#34;意大利辣香肠,奶酪&#34;因为j永远不会少于i

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