当前位置: 首页 > news >正文

算法的学习笔记—打印从 1 到最大的 n 位数

img

😀前言
在程序设计中,遇到需要打印从 1 到某个数的情况时,通常可以直接使用循环。然而,当我们面对的问题是打印从 1 到一个 n 位的最大数(如 999、9999 等)时,情况就变得复杂起来。特别是当 n 非常大时,直接使用整型数据可能会导致溢出或性能问题。因此,我们需要采用更灵活的方式进行处理。本文将介绍一种基于 Java 语言的解决方案。

🏠个人主页:尘觉主页

文章目录

  • 🥰打印从 1 到最大的 n 位数
    • 问题描述
    • 😇解题思路
      • 回溯法
      • 😍Java 实现
      • 代码解析
      • 示例输出
    • 🤣优化与思考
    • 😄总结

🥰打印从 1 到最大的 n 位数

问题描述

输入一个数字 n,要求程序打印出从 1 到最大的 n 位十进制数。比如输入 3,则应输出从 1 到 999 的所有数字。

😇解题思路

由于 n 的值可能会非常大,因此直接使用 int 或 long 类型来存储和操作数字显然是不合适的。为了避免整数溢出,我们可以选择使用字符数组来模拟数字的增量过程。

回溯法

在本问题中,我们采用回溯法来生成所有的可能数值。回溯法是一种通过选择不同的路径来生成所有可能的解的算法,非常适合用于生成组合或排列。

具体步骤如下:

  1. 字符数组表示数字:我们使用一个字符数组来表示当前数字,每个字符存储一个数字位,如 ‘1’、‘2’、‘3’ 等。
  2. 递归生成数值:通过递归的方式,逐位确定数字的每一位。对于 n 位数字,我们从高位到低位,依次填充每一位的可能值(0-9)。
  3. 处理前导零:由于我们是逐位生成数值,可能会有前导零(例如 “003”),这些在打印时需要去掉。
  4. 边界条件:当递归到达字符数组的最后一位时,即已经生成了一个完整的 n 位数,此时可以将其打印出来。

😍Java 实现

下面是完整的 Java 代码实现:

public void print1ToMaxOfNDigits(int n) {if (n <= 0)return;char[] number = new char[n];print1ToMaxOfNDigits(number, 0);
}private void print1ToMaxOfNDigits(char[] number, int digit) {if (digit == number.length) {printNumber(number);return;}for (int i = 0; i < 10; i++) {number[digit] = (char) (i + '0');print1ToMaxOfNDigits(number, digit + 1);}
}private void printNumber(char[] number) {int index = 0;while (index < number.length && number[index] == '0')index++;while (index < number.length)System.out.print(number[index++]);System.out.println();
}

代码解析

  1. 入口方法 print1ToMaxOfNDigits
    • 检查输入的 n 是否有效(大于 0)。
    • 创建一个长度为 n 的字符数组,用于存储当前生成的数字。
    • 调用递归方法 print1ToMaxOfNDigits 开始数字生成过程。
  2. 递归方法 print1ToMaxOfNDigits
    • 递归终止条件:当 digit 等于字符数组的长度时,表示一个完整的 n 位数字已生成,调用 printNumber 方法进行打印。
    • 递归生成数字:通过循环,将当前位从 ‘0’ 到 ‘9’ 依次赋值,然后递归调用自身生成下一位。
  3. 打印方法 printNumber
    • 去除前导零:通过循环跳过字符数组中的前导零部分。
    • 打印有效数字:从第一个非零位开始打印,直到字符数组结束。

示例输出

假设输入 n = 2,则程序会依次打印出 1 到 99 的所有数字:

1
2

98
99

🤣优化与思考

在实际应用中,回溯法虽然能有效生成所需的数字序列,但在性能上可能不如直接模拟加法的方式高效。然而,回溯法具有易于理解、实现简单的特点,非常适合用于初学者学习算法设计和递归思想。

😄总结

本文通过详细介绍一种使用字符数组和回溯法来打印从 1 到最大 n 位数的 Java 实现,展示了如何应对大规模数值生成的挑战。通过这种方法,我们不仅解决了整数溢出的难题,还提供了一种灵活的递归生成策略。这种思路和方法在其他类似的生成问题中也具有广泛的应用价值。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL Server 2022的索引
  • The Sandbox 游戏制作教程第 4 章|使用装备制作游戏,触发独特互动
  • 信创教育:培养未来科技创新的生力军
  • 八、OpenCVSharp 中图像阈值处理
  • uniapp预览图片uni.previewImage图片放大
  • Redis操作--RedisTemplate(二)StringRedisTemplate
  • 基于PSO-BP+BP多特征分类预测对比(多输入单输出) Matlab代码
  • 智能家居已是红海,竞争惨烈,或许高品质UI能增加产品辨识度
  • python结合csv和正则实现条件筛选数据统计分数
  • [ACP云计算]易混淆知识点(考题总结)
  • Linux的awk使用方式
  • springboot,mysql多数据源-mybaits
  • idea和jdk的安装教程
  • Qt QCustomPlot 图形库详解
  • 代码随想录算法训练营第三十天|查找重叠区间、划分字母区间
  • @jsonView过滤属性
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 2017-08-04 前端日报
  • angular学习第一篇-----环境搭建
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS魔法堂:Absolute Positioning就这个样
  • ES6核心特性
  • Git同步原始仓库到Fork仓库中
  • interface和setter,getter
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JS+CSS实现数字滚动
  • MobX
  • ReactNativeweexDeviceOne对比
  • Spring Cloud Feign的两种使用姿势
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue.js-Day01
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 大整数乘法-表格法
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 排序算法之--选择排序
  • 使用Swoole加速Laravel(正式环境中)
  • 1.Ext JS 建立web开发工程
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # include “ “ 和 # include < >两者的区别
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (2.2w字)前端单元测试之Jest详解篇
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (笔记)M1使用hombrew安装qemu
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (三分钟)速览传统边缘检测算子
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转) RFS+AutoItLibrary测试web对话框