题目的主要信息:
- 按照顺序从1输出到最大的十进制位数
举一反三:
学习完本题的思路你可以解决如下题目:
方法:数组输出(推荐使用)
思路:
既然是从1开始顺序输出到位数的最大值,一般来说位数最大就是个9,这样不方便于计算,可以直接遍历到位的最小值结束,即。
具体做法:
- step 1:从1开始连乘10或者直接用次方计算。
- step 2:从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
复杂度分析:
- 时间复杂度:,需要输出一共个数字
- 空间复杂度:,res属于返回必要空间,无额外辅助空间