本题其实考察的是大数问题

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);
        }
    }
}