题目描述
从 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前面)。
分析
进行占位依次输出即可,注意递归逻辑。
```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);
}
}
}