排列组合算法
排列算法:
排列算法采用递归思想很简单。如1,2,3,4我们求其排列。
首先遍历1,2,3,4.
遍历1,剩下2,3,4递归处理
遍历2,剩下1,3,4递归处理
遍历3,剩下1,2,4递归处理
遍历4,剩下1,2,3递归处理
我们的目标是把相应的排列给答应出来,所以这个时候需要一个数组来保存已经处理的数字。但是关于数组的下标在递归的时候是个问题,我们改采取怎样的方式呢?可以发现这里有一个技巧,用原始数组的长度减去当前待处理的数组的长度就得到元素的数组索引。如刚开时候是1,2,3,4。数组长度等于原始数组长度,所以1的索引是0。处理1之后,剩下2,3,4,此时数组长度是3,所以我们把2的数组索引定义为4-3=1。以此类推,直到数组的长度为1。
组合算法:
组合的思想和排列一样,只不过组合之间的元素不需要前后前后顺序要求,所以我们需要排除在排列中重复的元素。关于去除的思想,我们在这里可以采取一种简单的方法,我们将组合的元素按顺序排列,保证后面的元素大于前面的元素,这样就可以实现无重复了。
如,我们这样处理:
1,2;
1,3;
1,4;
2,3;
2,4;
3,4;
这样按照从小到大的顺序从而实现了无重复的排