题解 | #打印从1到最大的n位数# 大数问题
打印从1到最大的n位数
http://www.nowcoder.com/practice/4436c93e568c48f6b28ff436173b997f
本题其实考察的是大数问题
import java.util.*;
public class Solution {
int[] ans;
int count = 0;
public int[] printNumbers(int n) {
ans = new int[(int) Math.pow(10, n) - 1];
// digit表示要生成的数字的位数
for (int digit = 1; digit <= n; digit++) {
// 为了避免数字开头出现0,先把首位first固定,first取值范围为1~9
for (char first = '1'; first <= '9'; first++) {
char[] num = new char[digit];
num[0] = first;
// 生成首位之后进入递归生成剩下的digit - 1位数,从0~9中取值
dfs(1, num, digit);
}
}
return ans;
}
private void dfs(int index, char[] num, int digit) {
if (index == digit) {
ans[count++] = Integer.parseInt(String.valueOf(num));
return;
}
for (char i = '0'; i <= '9'; i++) {
num[index] = i;
dfs(index + 1, num, digit);
}
}
}