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

题解 - 取数排列

题目描述

取1到N共N个连续的数字(1≤N≤9),组成每位数不重复的所有可能的N位数,按从小到大的顺序进行编号。当输入一个编号M时,就能打印出与该编号对应的那个N位数。例如,当N=3时,可组成的所有三位数为:
在这里插入图片描述
那么,输入编号M=2时,则输出132。

输入
包括两个数,即正整数N(1 <= N <= 9)和正整数M(1 <= M <= 362880)。
输出
只有一行,即与输入的编号M对应的那个N位数。
样例输入
3 2
样例输出 Copy
132

分析

N <= 9,所以可以直接将n全排列,时间复杂度为O(n!),9! = 362880,并且全排列的过程中是从1开始枚举到n,故满足从小到大的关系,即不需要再进行排序,总时间复杂度满足题目要求

全排列

void dfs(int steps){if(steps == n + 1){tmp++; // tmp记录数量for(int i = 1;i <= n;i++) res[tmp][i] = path[i]; // res存储所有满足条件的情况return ;}for(int i = 1;i <= n;i++){if(!st[i]){st[i] = true;path[steps] = i;dfs(steps + 1);st[i] = false;}}
}

代码

#include<bits/stdc++.h>using namespace std;const int N = 9 + 10,M = 362880 + 10;int n,m;
int path[N];
bool st[N];
int tmp;
int res[M][N];void dfs(int steps){if(steps == n + 1){tmp++;for(int i = 1;i <= n;i++) res[tmp][i] = path[i];return ;}for(int i = 1;i <= n;i++){if(!st[i]){st[i] = true;path[steps] = i;dfs(steps + 1);st[i] = false;}}
}int main(){ios::sync_with_stdio;cin.tie(0),cout.tie(0);cin >> n >> m;dfs(1);for(int i = 1;i <= n;i++) cout << res[m][i];return 0;
}
http://www.lryc.cn/news/502990.html

相关文章:

  • JAVA实战:借助阿里云实现短信发送功能
  • 高阶函数:JavaScript 编程中的魔法棒
  • Android 12.0 Launcher3从首页开始安装app功能实现
  • 软考高级架构 - 10.5 软件架构演化评估方法
  • 半导体制造全流程
  • 国科大网络协议安全期末
  • ES动态索引——日志es索引数据按月份存储
  • NLP论文速读(ICML 2024)|面相对齐大语言模型的迁移和合并奖励模型方法
  • 蓝桥杯我来了
  • Vue3+TypeScript+AntVX6实现Web组态(从技术层面与实现层面进行分析)内含实际案例教学
  • 【LeetCode】每日一题 2024_12_13 K 次乘运算后的最终数组 I(暴力)
  • Plant simulation、Flexsim、Automod、Emulate3D、VisuaComponent仿真软件对比
  • 深度学习day4|用pytorch实现猴痘病识别
  • 批量导出工作簿中高清图片-Excel易用宝
  • 外观模式的理解和实践
  • linux离线安装部署redis
  • 网管平台(基础篇):路由器的介绍与管理
  • 数据结构——跳表
  • 活动预告 |【Part2】Microsoft Azure 在线技术公开课:基础知识
  • PyCharm如何导入库( 包 )
  • 【DevOps基础篇】SCM(Source Code Management)
  • DDS—RTPS一致性测试案例分析
  • 【深度学习入门】深度学习介绍
  • 数值分析—非线性方程的数值解
  • LDR6500应用:C转DP线材双向投屏开启全新体验
  • 路径规划之启发式算法之十六:和声搜索算法(Harmony Search, HS)
  • Redis - 实战之 全局 ID 生成器 RedisIdWorker
  • matlab 连接远程服务器
  • 在服务器自主选择GPU使用
  • 【设计模式】享元模式(Flyweight Pattern)