题目描述:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1: 输入: n = 1 输出: [1,2,3,4,5,6,7,8,9]
class Solution {
public:
vector<int> printNumbers(int n)
{
vector<int> nums;
long long m_num = pow(10,n);
for(int i=1;i<m_num;i++)
{
nums.push_back(i);
}
return nums;
}
};
iota 函数是一个计算机语言中的函数,用于产生连续的值。该函数位于头文件#include <numeric>中。定义在 numeric 头文件中的 iota() 函数模板会用连续的 T 类型值填充序列。前两个参数是定义序列的正向迭代器,第三个参数是初始的 T 值。第三个指定的值会被保存到序列的第一个元素中。保存在第一个元素后的值是通过对前面的值运用自增运算符得到的。
template <class ForwardIterator, class T>
void iota (ForwardIterator first, ForwardIterator last, T val)
{
while (first!=last)
{
*first = val;
++first;
++val;
}
}
class Solution {
public:
vector<int> printNumbers(int n)
{
vector<int> nums(pow(10,n)-1);
iota(begin(nums),end(nums),1);
return nums;
}
};
class Solution {
vector<string> res;
string cur;
char NUM[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
// 生成长度为 len 的数字,正在确定第x位(从左往右)
void dfs(int x, int len)
{
if(x == len)
{
res.push_back(cur);
return;
}
int start = x==0? 1 : 0; // X=0表示左边第一位数字,不能为0
for(int i=start; i<10; i++)
{
cur.push_back(NUM[i]); // 确定本位数字
dfs(x+1, len); // 确定下一位数字
cur.pop_back(); // 删除本位数字
}
}
public:
vector<int> printNumbers(int n)
{
for(int i=1; i<=n; i++) // 数字长度:1~n
dfs(0, i);
vector<int> res_int;
for(int i=0; i<res.size(); i++)
res_int.push_back(stoi(res[i]));
return res_int;
}
};