首先,M选N的算法规则:要从长度为M的数组中选N个数,列出所有组合:
- 生成一个长度为M的新数组;
- 初始化新数组,前N位填充为1,其余填充为0;
- 从左往右,找到第一个【10】,则交换1和0,即替换为0和1;
- 将替换后的1的左边的所有1移动到最左端;
- 重复步骤3;
- 如果没有找到【10】,则结束;
例子:求5中选3的组合,用数学公式计算组合为C5-3=(5x4x3)/(3x2x1)=10,算法穷举法验证:
1 2 3 4 5(原始数组)
1 1 1 0 0 -->1,2,3
1 1 0 1 0 -->1,2,4
1 0 1 1 0 -->1,3,4
0 1 1 1 0 -->2,3,4
1 1 0 0 1 -->1,2,5
1 0 1 0 1 -->1