0.摘要
给定n个不相同的数字,输出所有的排列方式。
1.思路
首先,我们回忆一下数学上解决排列问题的方法:
我们先从所有数据中选取一个,放在第一位;然后,再从剩下的数据中选取一个,放在第二位;不断重复,直到最后一位。这样我们就得到了所有的排列结果。
写成具体可操作的步骤即:
step1:a[0],a[1]……a[n],从n个元素选择一个
step2:除去step1已经选取的元素,从n-1个元素再选择一个
……
step(n):除去step1-step(n-1)已经选取的n-1个元素,只剩一个元素可选。
根据排列组合的思路:n个不同的数,排列组合共有n!种。因此,直接的思路是,使用n重for循环遍历,即可得到所有排列组合结果。
但是,这样的思路存在两个问题:
- 问题一:题目中给定的n并没有确定,所以for循环层数不确定。上述思路只适合n为确定数字的情况;
- 问题二:已经选取的元素,需要有一个数组记录状态,这样才能避免被重复选取
2.一个可行但不太好的方案:
首先,解决问题一:
分析上述问题,发现它符