
上QQ阅读APP看书,第一时间看更新
1.6 如何获取规定的排列组合
难度系数:★★★☆☆
被考查系数:★★★☆☆
题目描述:
将一组数字、字母或符号进行排列,以得到不同的组合顺序,如1、2、3这三个数的排列组合有:123、132、213、231、312和321。
分析与解答:
可以使用递归的方法将问题分解为较小的单元进行排列组合,如1、2、3、4的排列可以分为1[234]、2[134]、3[124]、4[123]进行排列,这个过程可以使用旋转法来实现:即先将旋转间隔设为0,再将最右边的数字旋转至最左边,并逐步增加旋转的间隔。然后对后面的子数组使用递归的方式进行求解。例如:
1234->旋转1->继续将右边234进行递归处理;
2134->旋转12变为21->继续将右边134进行递归处理;
3124->旋转123变为312->继续将右边124进行递归处理;
4123->旋转1234变为4123->继续将右边123进行递归处理。
实现代码如下:

程序的运行结果为
