每日一练(9):打印从1到最大的n位数

简介: 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。


示例 1:


输入: n = 1

输出: [1,2,3,4,5,6,7,8,9]


说明:

用返回一个整数列表来代替打印

n 为正整数


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:直接打印(暴力for循环输出)


C 库函数 double pow(double x, double y) 返回 xy 次幂,即 x^y。


复杂度分析:


  • 时间复杂度 O(10^n)) : 生成长度为 10^n 的列表需使用 O(10^n)时间。
  • 空间复杂度 O(1) : 建立列表需使用 O(1) 大小的额外空间( 列表作为返回结果,不计入额外空间 )。


vector<int> printNumbers(int n) {
    vector<int> res;
    if(n == 0)
        return res;
    int max = pow(10,n);
    //添加到容器数组中
    for(int i = 1 ; i < max ; i++)
    {
        res.push_back(i);
    }
    return res;
}


方法二:递归实现全排列


复杂度分析:


  • 时间复杂度 O(10^n) : 递归的生成的排列的数量为 10^n 。
  • 空间复杂度 O(10^n) : 结果列表 res 的长度为 10^n - 1,各数字字符串的长度区间为 1, 2, ..., n,因此占用 O(10^n) 大小的额外空间。


vector<int> res;
void dfs(int n, int idx, string path) {
    if (idx == n) { //如果索引index指向最低位的右侧,则到达递归边界,保存当前数字后返回
        int val = std::stoi(path);
        if (val != 0) {
            res.push_back(val);
        }
        return;
    }
    for (int i = 0; i < 10; ++i) {//每一位数从0到9排列,记录当前位数的一种情况后递归进行下一位数的排列
        path[idx] = i + '0';
        dfs(n, idx+1, path);
    }
}
vector<int> printNumbers(int n) {
    string path(n, '0');
    dfs(n, 0, path);
    return res;
}
目录
相关文章
|
SQL 存储 数据库连接
什么是分库分表,为什么要分库分表?
笔者经常将缓存、分库分表、消息队列定义为高并发三剑客。开发互联网应用系统时,分库分表是一个绕不开的技术点。 这篇文章,我们会探讨如下问题:
|
4月前
|
机器学习/深度学习 监控 算法
基于YOLOv8的电瓶车/电动车识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
本项目基于 YOLOv8 和 PyQt5,成功实现了电瓶车/电动车的自动识别系统,包含从模型训练到图形界面部署的完整流程。通过YOLOv8的强大目标检测能力和PyQt5的易用图形界面
|
数据采集
使用 Puppeteer 绕过 Captcha:实现商家数据自动化采集
本文介绍了如何使用Puppeteer结合代理IP和用户伪装技术,轻松绕过大众点评的Captcha验证,实现商家信息的高效采集。通过配置Puppeteer、设置代理和用户伪装参数、模拟人类操作等步骤,成功提取了目标页面的数据。该方法不仅提高了爬虫的稳定性和隐蔽性,还为市场研究和商业分析提供了有力支持。注意,数据采集需遵守法律法规及网站政策。
421 1
使用 Puppeteer 绕过 Captcha:实现商家数据自动化采集
|
存储 缓存 NoSQL
三级缓存实操系列(三)
三级缓存实操系列(三)
|
安全 Linux API
SELinux权限
SELinux权限
429 5
|
安全 数据挖掘 API
解锁数据宝藏:Microsoft Graph API的统一数据革命
解锁数据宝藏:Microsoft Graph API的统一数据革命
374 1
|
存储 传感器 缓存
Nvidia Isaac Sim安装与配置 入门教程 2024(2)
本文是Nvidia Isaac Sim安装与配置的入门教程,指导用户如何检查系统配置、安装Omniverse环境、配置Nucleus服务器、安装Isaac Sim软件包、设置命令行环境和编辑器环境,以及如何启动Isaac Sim仿真和加载机器人与环境。
5357 0
|
存储 缓存 NoSQL
|
网络协议 中间件 数据库
Zookeeper学习系列【三】Zookeeper 集群架构、读写机制以及一致性原理(ZAB协议)
Zookeeper学习系列【三】Zookeeper 集群架构、读写机制以及一致性原理(ZAB协议)
673 0
|
消息中间件 监控 前端开发
研发人员如何做好日常工作的稳定性保障
本文介绍了一些研发人员如何做好稳定性建设的工作事项
656 0