题目:
输入数字 n
,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
代码:
class Solution {
public:
vector<int> printNumbers(int n) {
vector<int> result;
if(n < 1)
return result;
int *number = new int[n];
for(int i = 0; i < n; i++)
number[i] = 0;
while(!Increment(number, n))
{
PrintNumber(number, n, result);
}
delete []number;
return result;
}
bool Increment(int *number, int n)
{
bool Isoverflow = false;
int Takeover = 0;
for(int i = n - 1; i >= 0; i--)
{
int sum = number[i] + Takeover;
if(i == n - 1)
sum++;
if(sum >= 10)
{
if(i == 0)
Isoverflow = true;
else
{
Takeover = 1;
sum -= 10;
number[i] = sum;
}
}
else
{
number[i] = sum;
break;
}
}
return Isoverflow;
}
void PrintNumber(int *number, int n, vector<int> &result)
{
bool StartZero = true;
int num = 0;
for(int i = 0; i < n; i++)
{
num = num * 10 + number[i];
}
result.push_back(num);
}
};
//使用排列的递归方法
class Solution {
public:
vector<int> printNumbers(int n) {
vector<int> result;
if(n < 1)
return result;
int *number = new int[n];
for(int i = 0; i < n; i++)
number[i] = 0;
for(int i = 0; i < 10; i++)
{
number[0] = i;
PrintNumbersCore(number, result, n, 0);
}
delete []number;
return result;
}
void PrintNumbersCore(int *number, vector<int> &result, int n, int index)
{
if(index == n -1)
{
PrintNumber(number, n, result);
return;
}
for(int i = 0; i < 10; i++)
{
number[index + 1] = i;
PrintNumbersCore(number, result, n, index+1);
}
}
void PrintNumber(int *number, int n, vector<int> &result)
{
bool StartZero = true;
int num = 0;
for(int i = 0; i < n; i++)
{
num = num * 10 + number[i];
}
if(num != 0)
result.push_back(num);
}
};