生成所有独特的排列
我正在研究一个问题,我给了一个数字,需要找到该数字中数字的每个可能的排列。 例如,如果给予20
,答案将是: 20
和02
。 我知道有n!
可能的排列,我已将数字分开,以便每个数字都是数组中的元素。 我的问题是:我如何遍历此数组以生成至少2位数但不超过6的数字的每种可能组合。
假设n
单独的数字是长度为n
的数组。 那么产生排列的问题归结为:
- 选择
n
数字中的一个作为要打印的第一个数字。 - 置换剩余的
n-1
数字。
递归。
这种递归函数permute
的伪代码类似于:
List permute (Array digits) { List permutations = /* initialize an empty list */ for (i=0; i
然后简单地调用permute
并打印出列表,或者用它做任何其他事情。
编辑:您还需要处理permute
1位数的边缘情况。
我认为这已经是“家庭作业”的太多信息了:)
暗示:
如何以1位数字解决这个问题?
现在,如果您对上一个问题的答案是2位数,您将如何解决这个问题?