题目
题目的主要信息:
- 按照顺序从1输出到最大的十进制 n n n位数
举一反三:
学习完本题的思路你可以解决如下题目:
方法:数组输出(推荐使用)
思路:
既然是从1开始顺序输出到 n n n位数的最大值,一般来说 n n n位数最大就是 n n n个9,这样不方便于计算,可以直接遍历到 n + 1 n+1 n+1位的最小值结束,即 1 0 n 10^n 10n。
具体做法:
- step 1:从1开始连乘10或者直接用次方计算 1 0 n 10^n 10n。
- step 2:从1遍历到 1 0 n − 1 10^n-1 10n−1,将所有数字顺序加入数组。
图示:
Java实现代码:
import java.util.*;
public class Solution {
public int[] printNumbers (int n) {
//找到该n+1位数的最小数字
int end = 1;
for(int i = 1; i <= n; i++)
end *= 10;
//从1遍历到n+1位数的最小数字输出
int[] res = new int[end - 1];
for(int i = 1; i < end; i++)
res[i - 1] = i;
return res;
}
}
C++实现代码:
class Solution {
public:
vector<int> printNumbers(int n) {
vector<int> res;
//找到该n+1位数的最小数字
int end = 1;
for(int i = 1; i <= n; i++)
end *= 10;
//从1遍历到n+1位数的最小数字输出
for(int i = 1; i < end; i++)
res.push_back(i);
return res;
}
};
Python实现代码:
class Solution:
def printNumbers(self , n: int) -> List[int]:
res = []
#找到该n+1位数的最小数字
end = 10 ** n
#从1遍历到n+1位数的最小数字输出
for i in range(1, end):
res.append(i)
return res
复杂度分析:
- 时间复杂度: O ( 1 0 n ) O(10^n) O(10n),需要输出一共 1 0 n − 1 10^n-1 10n−1个数字
- 空间复杂度: O ( 1 ) O(1) O(1),res属于返回必要空间,无额外辅助空间