组合算法里0~1置换个人认为是个比较不错的思路,举个例子各位看官就明白了,很好理解
举例:对于[1,2,3,4,5],的3个数的组合
初始一个0~1数组
- 1,1,1,0,0 因为是5个人数里找3个数,所以初始前三个是1
- 1,1,0,1,0 遇到第一个10,把1、0位置置换,同时这个10的前面都是1(如果有1也有0还要进行其他操作,看下面)
- 1,0,1,1,0 同上,记住只置换第一对10
- 0,1,1,1,0 同上,第一对10前面什么也没有
- 1,1,0,0,1 第一对10是最后两个数,这对10前面是 ’0,1,1‘ 把这对10前面的所有1移动到最前面
- 1,0,1,0,1 同上,第一对10前面只有1,所以无需移动
- 0,1,1,0,1 同上,第一对10前面什么也没有,所以无需移动
- 1,0,0,1,1 同上,第一对10前面有1也有0,这对10前面是 ’0,1‘ 把这对10前面的所有1移动到最前面
- 0,1,0,1,1 同上,第一对10前面什么也没有,所以无需移动
- 0,0,1,1,1 同上,第一对10前面只有0,所以无需移动
- 没有10了,组合结束了
这里的1对应输入数组里的数字,例如1,1,1,0,0 表示输入数组里与1相同下标的数是被选中进组合里的,这里就是1,2,3是一种组合
代