PHP程序员面试算法宝典
上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进行递归处理。

实现代码如下:

程序的运行结果为