当前位置: 首页 > news >正文

AcWing-1-递归实现指数型枚举

题目

从 1∼n1∼n 这 nn 个整数中随机选取任意多个,输出所有可能的选择方案。

输入格式

输入一个整数 nn。

输出格式

每行输出一种方案。

同一行内的数必须升序排列,相邻两个数用恰好 11 个空格隔开。

对于没有选任何数的方案,输出空行。

本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。

思路

从第一个位置开始选择,每个数字都有选择和不选择两种情况,选择完后,再跳到下一个位置继续选择,如果当前位置超过了数字所在位置的最大值,那么就终止递归,并且按照已经选择的数字进行打印输出

Q:如何表示目前所在位置?

A:通过变量u来表示当前所处的位置

Q:如何跳到下一个位置?

A:通过使u+1,并递归调用方法来表示跳到下一个位置进行判断

Q:如何记录当前位置是否选择?

A:通过数组来记录
 

Q:什么叫恢复现场?

A:根据递归二叉树可知,递归的调用顺序是中序遍历,左根右,根代表当前位置,左和右代表的是下一个位置,从左回到根时,需要撤销在左节点进行的操作,防止干扰下一个位置

代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n+1]; //记录状态,0表示没考虑,1表示选,2表示不选
        f(1,n,arr);
    }
    static void f(int u,int n,int[] arr){ //u为当前所处的位置,n为数字的个数
        //当前位置大于总数字个数
        if(u > n){
            for(int i = 1; i <= n; i++){
                if(arr[i] == 1)
                System.out.print(i + " ");
            }
            System.out.println();
            return;
        }
        //当前位置的数选
        arr[u] = 1;
        f(u+1,n,arr);
        //恢复现场
        arr[u] = 0;
        //当前位置的数不选
        arr[u] = 2;
        f(u+1,n,arr);
        //恢复现场
        arr[u] = 0;
    }
}

总结

 可以用画递归二叉树的方法来判断递归的调用过程

相关文章:

  • 易基因|文献科普:DNA甲基化测序揭示DNMT3a在调控T细胞同种异体反应中的关键作用
  • 基于springboot小型车队管理系统毕业设计源码061709
  • 大数据ClickHouse进阶(一):ClickHouse使用场景和集群安装
  • js面向对象之封装,继承,多态,类的详解
  • 永久免费H5直播点播播放器SkeyeWebPlayer.js实现webrtc流播放
  • JavaScript-HelloWorld、浏览器控制台使用、数据类型
  • Centos部署Docker
  • 视频剪辑教程自学技巧:关于正确的短视频剪辑流程分享
  • 30、三维表面重建-Convolutional Occupancy Network
  • Android 用户如何将Room根据不同账户动态分库方案
  • 539、RabbitMQ详细入门教程系列 -【100%消息投递消费(一)】 2022.08.31
  • 基于信贷业务的量化风险评估简述
  • 项目经理如何做好任务分解,制定项目计划
  • 高级JAVA面试题详解(一)——CurrentHashMap、HashMap、HashTable的区别
  • Dart 2.18 发布,Objective-C 和 Swift interop
  • [译]CSS 居中(Center)方法大合集
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【mysql】环境安装、服务启动、密码设置
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Apache Spark Streaming 使用实例
  • centos安装java运行环境jdk+tomcat
  • Facebook AccountKit 接入的坑点
  • JavaScript对象详解
  • javascript数组去重/查找/插入/删除
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Vue2.0 实现互斥
  • win10下安装mysql5.7
  • 创建一种深思熟虑的文化
  • 项目管理碎碎念系列之一:干系人管理
  • 携程小程序初体验
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 用element的upload组件实现多图片上传和压缩
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (分布式缓存)Redis持久化
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET 指南:抽象化实现的基类
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net对接阿里云CSB服务
  • .stream().map与.stream().flatMap的使用
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Mapper作用