LeetCode(剑指 Offer)- 17. 打印从1到最大的n位数
Posted 放羊的牧码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(剑指 Offer)- 17. 打印从1到最大的n位数相关的知识,希望对你有一定的参考价值。
题目链接:点击打开链接
题目大意:略
解题思路:略
相关企业
- 微软(Microsoft)
AC 代码
// 解决方案(1)
class Solution
public int[] printNumbers(int n)
int len = 0;
for (int i = 0; i < n; i++)
len = len * 10 + 9;
int[] arr = new int[len];
for (int i = 1; i <= len; i++)
arr[i - 1] = i;
return arr;
// 解决方案(2)
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]; // 定义长度为 n 的字符列表
dfs(0); // 开启全排列递归
res.deleteCharAt(res.length() - 1); // 删除最后多余的逗号
return res.toString(); // 转化为字符串并返回
void dfs(int x)
if(x == n) // 终止条件:已固定完所有位
res.append(String.valueOf(num) + ","); // 拼接 num 并添加至 res 尾部,使用逗号隔开
return;
for(char i : loop) // 遍历 ‘0‘ - ’9‘
num[x] = i; // 固定第 x 位为 i
dfs(x + 1); // 开启固定第 x + 1 位
输入:n = 1
输出:"0,1,2,3,4,5,6,7,8,9"
输入:n = 2
输出:"00,01,02,...,10,11,12,...,97,98,99"
输入:n = 3
输出:"000,001,002,...,100,101,102,...,997,998,999"
// 去除前置 0
class Solution
StringBuilder res;
int nine = 0, count = 0, start, 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];
start = n - 1;
dfs(0);
res.deleteCharAt(res.length() - 1);
return res.toString();
void dfs(int x)
if(x == n)
String s = String.valueOf(num).substring(start);
if(!s.equals("0")) res.append(s + ",");
if(n - start == nine) start--;
return;
for(char i : loop)
if(i == '9') nine++;
num[x] = i;
dfs(x + 1);
nine--;
// 整型化(最终版)
class Solution
int[] res;
int nine = 0, count = 0, start, n;
char[] num, loop = '0', '1', '2', '3', '4', '5', '6', '7', '8', '9';
public int[] printNumbers(int n)
this.n = n;
res = new int[(int)Math.pow(10, n) - 1];
num = new char[n];
start = n - 1;
dfs(0);
return res;
void dfs(int x)
if(x == n)
String s = String.valueOf(num).substring(start);
if(!s.equals("0")) res[count++] = Integer.parseInt(s);
if(n - start == nine) start--;
return;
for(char i : loop)
if(i == '9') nine++;
num[x] = i;
dfs(x + 1);
nine--;
以上是关于LeetCode(剑指 Offer)- 17. 打印从1到最大的n位数的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode剑指 Offer 17. 打印从1到最大的n位数(C++)
LeetCode(剑指 Offer)- 17. 打印从1到最大的n位数
⭐算法入门⭐《线性枚举》简单10 —— LeetCode 剑指 Offer 17. 打印从1到最大的n位数