相关文章推荐
爽快的冲锋衣  ·  使用 Oracle JDeveloper ...·  1 年前    · 
逃跑的生菜  ·  10個有用的jQuery編寫技巧 - iT ...·  1 年前    · 
豪气的馒头  ·  [VBA教学3.22]查询系统制作(单元格查 ...·  1 年前    · 
销魂的海豚  ·  Gtest/Gmock实战之Gmock_51 ...·  1 年前    · 
千杯不醉的香槟  ·  如何用Python和PubNub做实时数据可 ...·  1 年前    · 
Code  ›  剑指offer-打印从 1 到最大的 n 位数开发者社区
https://cloud.tencent.com/developer/article/1889064
光明磊落的高山
1 年前
作者头像
小土豆Yuki
0 篇文章

剑指offer-打印从 1 到最大的 n 位数

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 洁癖是一只狗 > 剑指offer-打印从 1 到最大的 n 位数

剑指offer-打印从 1 到最大的 n 位数

作者头像
小土豆Yuki
发布 于 2021-10-14 16:52:43
520 0
发布 于 2021-10-14 16:52:43
举报

题目

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。

输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]

解题思路(一)

  1. 找到最大数number的值,计算公10的n次方-1;
  2. 直接遍历循环number;
private  void   printMaxNumer(int n){
        int maxValue =(int) Math.pow(10, n) - 1;
        for (int i = 1; i <= maxValue; i++) {
            System.out.print(i);
            System.out.println();
}

这种方式虽然很简单,但是他没有办法处理数值大的数,比如n>10之后,int就会溢出。

解题思路(二)

基于上面思路,这次可以使用字符串形式打印从1到最大n位数

  1. 我们发现n位数的每一位数其实就是0~9的全排列
  2. 递归条件就是我迭代到最低位就是个位,这个时候就应该输出数字
  3. 如果我们未满n位的数字前面补0,在打印的时候,前面的0不要打印出来

上图是简单的基本思路,边看代码边看图,有助于理解代码,完整代码如下

public class Soultion {
    public void printToMaxofNDigits(int n){
        if(n<=0){
            return;
        char[] number = new char[n];
        printToMaxofNDigits(number,0);
    private void printToMaxofNDigits(char[] number, int digit) {
        //终止条件
        if (digit == number.length) {
            printNumer(number);
            return;
       //循环每一位数中可能的数字[0-9]
        for (int i = 0; i < 10; i++) {
             //此时digit=0即百位,number[0]=0
            number[digit] = (char) (i + '0');
            //进入下一层是个位,因此 digit要+1 
            printToMaxofNDigits(number, digit + 1);
     //这里主要的打印以及防止打印出前面的0,如[0,0,1] ,打印1就行
    private void printNumer(char[] number) {
        int index = 0;
        while (index < number.length && number[index] == '0') {
            index++;
        while (index < number.length) {
 
推荐文章
爽快的冲锋衣  ·  使用 Oracle JDeveloper 10g BPEL Designer 对贷款流流程进行建模和部署
1 年前
逃跑的生菜  ·  10個有用的jQuery編寫技巧 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
1 年前
豪气的馒头  ·  [VBA教学3.22]查询系统制作(单元格查找实际应用)
1 年前
销魂的海豚  ·  Gtest/Gmock实战之Gmock_51CTO博客_gtest gmock
1 年前
千杯不醉的香槟  ·  如何用Python和PubNub做实时数据可视化 - 知乎
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号