题解|#递归实现组合型枚举#

递归实现组合型枚举

https://ac.nowcoder.com/acm/problem/50918

题目描述

从 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);
        }
    }
    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 11:30
找工作7个月,投了7000封,3段世界五百强实习,才有一个offer,牛油们肯定比我强吧
码农索隆:不对不对不对,实习经历这么厉害,简历也没少投,问题出在哪呢
点赞 评论 收藏
分享
06-19 19:06
门头沟学院 Java
码农索隆:别去东软,真学不到东西,真事
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务