输入数字 n
,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
分为两种场景,是否是大数问题。
class Solution:
def printNumbers(self, n: int) -> List[int]:
res = []
for i in range(1, 10 ** n):
res.append(i)
return res
class Solution:
def printNumbers(self, n: int) -> [int]:
def dfs(x):
if x == n:
s = ''.join(num[self.start:])
if s != '0': res.append(int(s))
if n - self.start == self.nine: self.start -= 1
return
for i in range(10):
if i == 9: self.nine += 1
num[x] = str(i)
dfs(x + 1)
self.nine -= 1
num, res = ['0'] * n, []
self.nine = 0
self.start = n - 1
dfs(0)
return res
class Solution {
public:
void printNumbers(int n,int index,string& str,vector<int> &rs) {
if (index == n) {
int num = atoi(str.c_str());
if (num != 0) rs.push_back(num);
return;
}
for (int i = 0;i < 10;i++) {
//每一位 从0到9依次排列
str[index] = i + '0';
printNumbers(n, index+1, str, rs);
}
}
vector<int> printNumbers(int n) {
vector<int> rs;
string str;
str.resize(n);
printNumbers(n, 0, str, rs);
return rs;
}
};