打印从1到最大的n位数
题目描述
输入数字 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;
}
};