面试题12. 打印1到最大的n位数

2024-05-14 16:08
文章标签 位数 面试题 最大 打印

本文主要是介绍面试题12. 打印1到最大的n位数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

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

思路1,用加法:

如果n很小,那么完全可以用(长)整型来实现。

public static void print(int n) {int num = 1;while(n-- > 0) {num *= 10;}for(int i = 1; i < num; i++) {System.out.println(i);}
}

如果n很大很大,必须用字符串来模拟数字。

  • 首先,初始化一个长度为n的字符串,并把字符串上的每一位全部初始化为’0’
  • 然后模拟字符串加法,每次都加1,并打印出来。

模拟字符串加法,请见美团面试题:http://blog.csdn.net/u010429424/article/details/77407973

思路2,用字符的全排列:

对于n位数字,每一位数字都从 0 ~ 9 之间取值,n位数字就是n个全排列。
我们把这些全排列写出来,然后打印出来就行了。
注意,不要打印出前几位的0。

全排列的核心代码如下:

static char[] arr = {'0','1','2','3','4','5','6','7','8','9'};public static void solution2(int n) {char[] num = new char[n];for(int i = 0; i < 10; i++) {num[0] = arr[i];core(num, 0); // 开始递归}
}public static void core(char[] num, int index) {if(index == num.length-1) {print(num);return ;}for(int i = 0; i < 10; i++) {num[index + 1] = arr[i];core(num, index + 1);}
}

最后,给出全部的代码:

/*** description:打印1到n的数字*     方法1. 用int*     方法2. 字符串模拟加法*     方法3. 全排列* @author lijialin**/public class Main {// 方法1,当n很小时,使用int表示数字public static void solution1(int n) {int num = 1;while(n-- > 0) {num *= 10;}for(int i = 1; i < num; i++) {System.out.println(i);}}// 方法3, 当n放大时,int表示不下,用全排列static char[] arr = {'0','1','2','3','4','5','6','7','8','9'};public static void solution2(int n) {char[] num = new char[n];for(int i = 0; i < 10; i++) {num[0] = arr[i];core(num, 0); // 开始递归}}public static void core(char[] num, int index) {if(index == num.length-1) {print(num);return ;}for(int i = 0; i < 10; i++) {num[index + 1] = arr[i];core(num, index + 1);}}public static void print(char[] num) {boolean isBeginning = true;for(int i = 0; i < num.length; i++) {if(isBeginning && num[i] != '0') {isBeginning = false;}if(!isBeginning) {System.out.print(num[i]);}}System.out.println();}// mainpublic static void main(String[] args) {// test case 1int n = 3;solution1(n);solution2(n);}
}

注:学渣心里苦,不要学楼主,平时不努力,考试二百五,哭 ~

这里写图片描述

这篇关于面试题12. 打印1到最大的n位数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989203

相关文章

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

【SparkStreaming】面试题

Spark Streaming 是 Apache Spark 提供的一个扩展模块,用于处理实时数据流。它使得可以使用 Spark 强大的批处理能力来处理连续的实时数据流。Spark Streaming 提供了高级别的抽象,如 DStream(Discretized Stream),它代表了连续的数据流,并且可以通过应用在其上的高阶操作来进行处理,类似于对静态数据集的操作(如 map、reduce、

Java线程面试题(50)

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程,

关于修改计算机的处理器数和最大内存数的问题

问题描述: 刚开始本来是想让计算机的运行速度运行的快点,于是在网上搜索如何让计算机的运行速度更快,找到了一种关于修改计算机内存数和计算机的处理核数可以让计算机运行的更快。 遇到问题: 当我通过命令msconfig →引导→高级选项→勾选了处理器数和最大内存数,然后重启,结构整个计算机都卡的要死,于是记录下来。网上的答案有时候真的是很不负责任,也有可能是自己技术不到位。 结果:取消处理器和内

Android Log日志 - 打印不全问题

AndroidStudio在打印Log的时候目前支持4*1024长度,超出部分不能打印。当你在各种百度之后有对应的解决办法,但是每次都是部分代码,看着都忧伤。索性此次项目调试的数据也是比较多滴,目前就准备对Log开刀来写一个Log类,还是如以往的性格直接写完整的类,方便需要的人用。反正又不是什么高深的东西,为了给被方便同时也是给自己方便。 /*** Relin* 2019-07-10 10:40

C语言常见面试题3 之 基础知识

(1)i++和++i哪个效率更高? 对于内建数据类型,二者效率差别不大(去除编译器优化的影响) 对于自定义数据类型(主要是类),因为前缀式(++i)可以返回对象的引用;而后缀式(i++)必须返回对象的值,所以导致在大对象时产生了较大的复制开销,引起效率降低。 (2)不使用任何中间变量如何交换a b的值? void swap(int& a, int& b)//采用引用传参的方式{a^=

Java面试题:内存管理、类加载机制、对象生命周期及性能优化

1. 说一下 JVM 的主要组成部分及其作用? JVM包含两个子系统和两个组件:Class loader(类装载)、Execution engine(执行引擎)、Runtime data area(运行时数据区)、Native Interface(本地接口)。 Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)装载class文件到Runtim

Android gradle打印依赖的各种姿势

查看Android Gradle 依赖树 1.查看单独模块的依赖 命令行 ./gradlew :模块名:dependencies 例子: ./gradlew :app:dependencies 这个命令会将 gradle 执行的各个步骤全打印出来,包括引用的库,和库中引用的库文件 ./gradlew :app:dependencies --configuration im

面试题3:GET 和 POST 有什么区别?

[!]高频面试题。 GET 和 POST 没有本质区别,可以进行相互代替。 1、GET语义:“从服务器获取数据”;POST语义:“往服务器上提交数据”。[设计初衷,不一定要遵守] 2、发请求时,给服务器传递的数据,GET 一般是放在查询字符串中,但GET 也可以把数据放在 body 里。不过比较少见,以至于浏览器不一定能支持,不过其他的http客户端可以支持;POST 一般是放在 body 中

2025秋招NLP算法面试真题(二)-史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer

简单介绍 之前的20个问题的文章在这里: https://zhuanlan.zhihu.com/p/148656446 其实这20个问题不是让大家背答案,而是为了帮助大家梳理 transformer的相关知识点,所以你注意看会发现我的问题也是有某种顺序的。 本文涉及到的代码可以在这里找到: https://github.com/DA-southampton/NLP_ability 问题