打印从1到最大的n位数

题目描述

来源于 https://leetcode-cn.com/

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

示例 1:

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

说明:

  • 用返回一个整数列表来代替打印
  • n 为正整数

解法:

leetcode 上的这个题没有反应出剑指offer的原意,书中原意是使用字符串来模拟数字的递增过程,及 "199" 变为 "200"。所以这里我按照书上的意思实现代码,leetcode 上本题没有什么意义。

class Solution {
public:
    vector<string> printNumbers(int n) {
        vector<string> res;
        string num = "1";
        while(num.size() <= n){
            res.push_back(num);·

            if(num.back() != '9'){
                num.back() += 1;
            }else{
                int n9 = 0;
                while(!num.empty() && num.back() == '9'){
                    num.pop_back();
                    n9++;
                }
                if(num.empty()){
                    num.push_back('1');
                    num.append(n9, '0');
                }else{
                    num.back() += 1;
                    num.append(n9, '0');
                }
            }
        }
        return res;
    }
};