【题目描述】
M选N组合算法, 有m长度的数组,从中随机选出n个,一般m远大于n
【示例】
例如求5中选3的组合:
1,2,3 1,2,4 1,3,4 2,3,4 1,2,5 1,3,5 2,3,5
【代码1】
public class Solution {
public static void main(String[] args) {
// M选N的算法
int m = 5;
int n = 3;
int[] a = new int[m];
int[] b = new int[n];
for(int i = 0; i < m; i++){
a[i] = i + 1; // a数组存储m对应的数字
}
mGetN(m, n, a, b);
}
private static void mGetN(int m, int n, int[] a, int[] b) {
for(int i = n; i <= m; i++) {
b[n - 1] = i - 1;
if (n > 1) {
mGetN(i - 1, n - 1, a, b); // 这里是 i-1和n-1, 因为i是变量
} else {
for(int j = 0; j < b.length; j++){
System.out.printf("%d ", a[b[j]]);
}
System.out.println();
}
}
}
}
【代码2】
学习参考:https://blog.51cto.com/u_13184837/2409923