打印从1到最大的n位数
问题陈述
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
简易解法
1 2 3 4 5 6 7 8 9 10
| class Solution { public int[] printNumbers(int n) { int len=(int)Math.pow(10,n)-1; int[] nums=new int[len]; for(int i=0;i<len;i++){ nums[i]=i+1; } return nums; } }
|
考虑大数越界
当 n 较大时,结果会超出 int32 整型的取值范围,超出取值范围的数字无法正常存储。应该存储为字符串进行输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { StringBuilder res; int count = 0, n; char[] num, loop = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; public String printNumbers(int n) { this.n = n; res = new StringBuilder(); num = new char[n]; dfs(0); res.deleteCharAt(res.length() - 1); return res.toString(); } void dfs(int x) { if(x == n) { res.append(String.valueOf(num) + ","); return; } for(char i : loop) { num[x] = i; dfs(x + 1); } } }
|