从M个数中任意选出N个数,罗列出所有的情况

用 java 实现的简单思路是什么呢?? 8)

[code="java"]
/**

  • @author Tony.Yan */

public class Test {

private int m;
private int[] set;
private boolean first;
private int position;

public Test(int n, int m) {
    this.m = m;
    first = true;
    position = n - 1;
    set = new int[n];
    for (int i = 0; i < n; i++)
        set[i] = i + 1;
}

public boolean hasNext() {
    return set[0] < m - set.length + 1;
}

public int[] next() {
    if (first) {
        first = false;
        return set;
    }
    if (set[set.length - 1] == m)
        position--;
    else
        position = set.length - 1;
    set[position]++;
    for (int i = position + 1; i < set.length; i++)
        set[i] = set[i - 1] + 1;
    return set;
}

public static void main(String[] args) {
    Test nOfm = new Test(3, 5);
    while (nOfm.hasNext()) {
        int[] set = nOfm.next();
        for (int i = 0; i < set.length; i++) {
            System.out.print(set[i]);
        }
        System.out.println();
    }
}

}
[/code]

使用递归简单

其实我建议楼上给个伪代码。留点思考空间

public Test(int n, int m) {

this.m = m;

first = true;

position = n - 1;

set = new int[n];

for (int i = 0; i < n; i++)

set[i] = i + 1;

}

这个地方就是input

代码的意思是从1到m个数找出n个数,set[]不就是你要输出的结果吗