我正在研究一个问题,在这个问题中,我得到了一个数字,并且需要
找到该数字中数字的每个可能的排列。对于
例如,如果我获得20
,则答案为:20
和02
。我知道
有n!
个可能的排列,我把它分开了
数字,以便每个数字是数组中的元素。我的问题是:
我如何遍历此数组以生成所有可能的内容
数字组合至少2位数但不多
比6。
答案 0 :(得分:5)
提示:
如何以1位数字解决此问题?
现在,如果您对上一个问题的答案是2位数,您将如何解决这个问题?
答案 1 :(得分:2)
假设n
个别数字位于长度为n
的数组中。然后产生排列的问题归结为:
n
数字作为要打印的第一个数字。n-1
位数。递归。
这种递归函数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位数的边缘情况。
我认为这已经是“家庭作业”的太多信息了:))