题目描述

从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。n \gt 0n>0, 0 \leq m \leq n0≤m≤n, n+(n-m)\leq 25n+(n−m)≤25。

输入描述:

两个整数n,m。

输出描述:

按照从小到大的顺序输出所有方案,每行1个。

首先,同一行内的数升序排列,相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 9 12排在1 3 10 11前面)。

分析

进行占位依次输出即可,注意递归逻辑。 alt

```import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int m = sc.nextInt();
            for(int i = 1;i <= n; i++){
//设定第一位,然后依次填数顺序输出即可
                dfs(i,""+i,n,m,1);
            }
        }
    public static void dfs(int i,String str,int n,int m,int len){
 //i设定开头位,str为需要打印出来的字符串,m限定字符串长度,len记录此时字符串长度
        if(len == m) System.out.println(str);
 //len判断字符串长度是否满足m的限制
        for(int j = i+1;j <= n;j++){
 //从一根支线一直递归下去寻找排序找到一支的最底下,然后回到for循环里面把j++执行完毕。
            dfs(j,str + " " +j,n,m,len+1);
        }
    }
    }