生成所有独特的排列

时间:2012-02-23 15:13:04

标签: java arrays sorting

我正在研究一个问题,在这个问题中,我得到了一个数字,并且需要 找到该数字中数字的每个可能的排列。对于 例如,如果我获得20,则答案为:2002。我知道 有n!个可能的排列,我把它分开了 数字,以便每个数字是数组中的元素。我的问题是: 我如何遍历此数组以生成所有可能的内容 数字组合至少2位数但不多 比6。

2 个答案:

答案 0 :(得分:5)

提示:

如何以1位数字解决此问题?

现在,如果您对上一个问题的答案是2位数,您将如何解决这个问题?

答案 1 :(得分:2)

假设n个别数字位于长度为n的数组中。然后产生排列的问题归结为:

  1. 选择其中一个n数字作为要打印的第一个数字。
  2. 置换剩余的n-1位数。
  3. 递归。

    这种递归函数permute的伪代码类似于:

    List permute (Array digits)
    {
      List permutations = /* initialize an empty list */
    
      for (i=0; i<n; i++)
        {
          firstDigit = digit[i];
          Array otherDigits = /* array containing all digits except firstDigit.  */
          List subPermutations = permute(otherDigits);
          /* prepend firstDigit into each element of 'subPermutations' */
          /* add all elements of 'subPermutations' to the list 'permutations' */
        }
      return permutations;
    }
    

    然后只需拨打permute并打印出列表,或使用它做任何其他事情。

    编辑:您还需要处理permute 1位数的边缘情况。

    我认为这已经是“家庭作业”的太多信息了:))