打印从1到最大的n位数
输入数字 n
,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:
输入: n = 1输出: [1,2,3,4,5,6,7,8,9]
说明:
- 用返回一个整数列表来代替打印
- n 为正整数
正常情况
public int[] printNumbers(int n) {
int[] ans = new int[(int)Math.pow(10, n) - 1];
for (int i = 0; i < ans.length; i++) {
ans[i] = i + 1;
}
return ans;
}public int[] printNumbers(int n) {
int[] ans = new int[(int)Math.pow(10, n) - 1];
for (int i = 0; i < ans.length; i++) {
ans[i] = i + 1;
}
return ans;
}
考虑大数
private List<Integer> list = new ArrayList<>();
public int[] printNumbers(int n) {
dfs(0, n, new StringBuilder());
int[] ans = new int[list.size()];
for (int i = 0; i < ans.length; i++) {
ans[i] = list.get(i);
}
return ans;
}
public void dfs(int i, int n, StringBuilder sb) {
if (i == n) {
int num = Integer.parseInt(sb.toString());
if (num != 0) {//考虑0开头的情况,由于字符串转数字会去除前面的0,所以只需要判断是否为0
list.add(num);
}
return;
}
for (int j = 0; j < 10; j++) {
sb.append(j);
dfs(i + 1, n, sb);
sb.deleteCharAt(sb.length() - 1);
}
}