1. 题目
2. 思路
(1) 普通遍历
(2) 全排列法(深度优先搜索)
- 如果考虑大数问题,返回值类型只能修改为字符串。
- 利用深度优先搜索,对1-n位数依次进行全排列,注意第1位数不能为0。
- 以3位数为例,原理如图所示:
3. 代码
public class Test {
public static void main(String[] args) {
Solution1 solution = new Solution1();
System.out.println(solution.printNumbers(7));
}
}
class Solution {
public int[] printNumbers(int n) {
int[] result = new int[(int) Math.pow(10, n) - 1];
for (int i = 0; i < result.length; i++) {
result[i] = i + 1;
}
return result;
}
}
class Solution1 {
private StringBuilder result;
private char[] number;
public String printNumbers(int n) {
result = new StringBuilder();
for (int digit = 1; digit <= n; digit++) {
number = new char[digit];
for (char first = '1'; first <= '9'; first++) {
number[0] = first;
dfs(1, number, digit);
}
}
result.deleteCharAt(result.length() - 1);
return result.toString();
}
private void dfs(int index, char[] number, int digit) {
if (index == digit) {
result.append(new String(number) + ",");
return;
}
for (char i = '0'; i <= '9'; i++) {
number[index] = i;
dfs(index + 1, number, digit);
}
}
}