每日一练(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;
}
目录
相关文章
|
5天前
|
C语言
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
|
5天前
|
C语言
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
|
5天前
|
存储 C语言 C++
【C语言刷题系列】水仙花数的打印及进阶
【C语言刷题系列】水仙花数的打印及进阶
|
1月前
|
C语言
c语言编程练习题:7-37 输出整数各位数字
c语言编程练习题:7-37 输出整数各位数字
33 1
|
1月前
|
C语言
c语言编程练习题:7-28 求整数的位数及各位数字之和
c语言编程练习题:7-28 求整数的位数及各位数字之和
38 0
|
1月前
|
小程序 C语言
【C语言】输入一个十进制正整数,将它对应的二进制数的各位逆序,形成新的十进制数输出。题目分析及拓展应用。
【C语言】输入一个十进制正整数,将它对应的二进制数的各位逆序,形成新的十进制数输出。题目分析及拓展应用。
66 0
|
1月前
|
Python Java Go
Python每日一练(20230409) 字符串拆分数值求和、快乐数、格雷编码
Python每日一练(20230409) 字符串拆分数值求和、快乐数、格雷编码
53 0
Python每日一练(20230409) 字符串拆分数值求和、快乐数、格雷编码
|
6月前
|
C语言
C语言第三十二弹---打印整数二进制的奇数位和偶数位
C语言第三十二弹---打印整数二进制的奇数位和偶数位
|
7月前
|
C语言
C语言每日一题 ---- 打印从1到最大的n位数(Day 1)
C语言每日一题 ---- 打印从1到最大的n位数(Day 1)
49 0
|
11月前
|
C语言
C语言实例:求水仙花数(阿姆斯壮数)和回文数(附带求一串数字的位数方法和每一位数字的计算方法)
C语言实例:求水仙花数(阿姆斯壮数)和回文数(附带求一串数字的位数方法和每一位数字的计算方法)
118 0