java中所有可能大小的所有可能的排列

问题描述:

假设我有数字1,2,3。算法看起来是什么样的,以便在所有可能的大小下采取所有可能的排列。输出:java中所有可能大小的所有可能的排列

1, 2 ,3 | 3, 2 ,1 | 2, 1 ,3 | 1, 3, 2 ... | 1, 2 | 2, 1 | 3, 1 |..... 1 | 2 | 3

你只是做了正常的排列算法和输入的每个字母量子问题?

+0

请标签这个功课,如果这就是它是什么,然后自己尝试一下,并告诉我们你试过什么。根据你喜欢循环还是递归,有几种编写算法的方法。您的建议将其分解为递归子问题是一个好的开始。 – 2012-04-05 03:06:17

+0

很抱歉,这不是家庭作业。我试图解决一个比赛问题,然后我意识到这个问题的基本前提是这个问题对于如何解决这个问题毫无头绪。 – Tom 2012-04-05 03:08:00

+1

你应该仍然会采取一些措施,并在卡住的地方寻求帮助。恕我直言,比赛问题的关键不是在*上找到答案,并且*的重点不是为人们回答比赛问题。 – rfeak 2012-04-05 03:10:16

您需要生成所有可能的子集并对它们进行置换。

伪代码(如下C++)

generate (a[]) { 
    int size = a.size; 
    sort(a) 
    for (i = 1; i < (1<<size); i++) { 
     b[]; 
     for (j = 0; j < size; j++) { 
      if (i&(1<<j)) { 
       add a[j] to b; 
      } 
     } 

     do { 
      for (i=0 to b.size) { 
       print b[i]; 
      } 
     }while(next_permutation(b.begin(), b.end()); 
    } 
} 
+0

如果你排序'a'一次。不需要重复排序'b'。 – st0le 2012-04-05 04:28:20

+0

@ st0le,是的。谢谢。 – 2012-04-05 04:32:16