输入数字n,按顺序打印到最大的n位数

注意:没有规定类型,无论int或long 都会有可能溢出。
应当选择其他类型如String
方法一:定义长度与位数相同的字符数组,从0开始进行加一操作打印

  public static void f1(int n) {
char [] array=new char[n];
for(int i=0;i<array.length;i++) {
array[i]='0';
}
int k=0;
while(true) {
k=1;
for(int i=0;i<array.length;i++) {
if(array[i]!='9') {k=0;break;}                
}
PrintNum(array);
if(k==1)
return ;
array=addOne(array);
}    
}
 //打印字符串,因为前面0不打印   
public static void PrintNum(char []ch) {  
int k=1;
for(int i=0;i<ch.length;i++) {             
if(ch[i]>='1'||k==0) {
System.out.print(ch[i]);
k=0;                          
}
}
if(k==0)
System.out.println();
} public static char[] addOne(char [] ch) //字符串的加一操作
   { ch[ch.length-1]++;
for(int i=ch.length-1;i>0;i--) {
if(ch[i]<='9') break;
ch[i]='0';
ch[i-1]++;              
}
return ch;
}

方法二:全排列

 static void f2(int n){
if(n<=0) return ;
char [] array=new char[n];
for(int i=0;i<10;++i){
array[0]= (char) (i+'0');
Recur( array,1);
}
}
static void Recur(char[] array, int index){
if( index==array.length) { PrintNum( array ); return ;} for( int i=0;i<10;i++){ array[index]= (char) (i+'0');
Recur( array,index+1);
}
}
static void PrintNum(char []ch) {
int k=1;
for(int i=0;i<ch.length;i++) {
if(ch[i]>='1'||k==0) {
System.out.print(ch[i]);
k=0;
}
}
if(k==0)
System.out.println();
}

在java本机测试中方法一在9以内比方法二慢,9以上比方法二快许多

面试题十七:打印从1到最大的n位数的更多相关文章

  1. 【剑指offer】面试题 17. 打印从 1 到最大的 n 位数

    面试题 17. 打印从 1 到最大的 n 位数 题目描述 题目:输入数字 n,按顺序打印出从 1 最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数即 999. 解答过 ...

  2. 《剑指offer》面试题17. 打印从1到最大的n位数

    问题描述 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 示例 1: 输入: n = 1 输出: [1,2,3,4,5 ...

  3. 面试题17.打印从1到最大的n位数

    void print_n_number(int n){ if(n<=0){ cout<<"fuckyou"; return; } string s="1 ...

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

    // 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...

  5. 算法笔记_189:历届试题 横向打印二叉树(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树 ...

  6. 剑指Offer:打印从1到最大的n位数

    题目:输入数值n,按顺序打印从1到最大的n位数,例如输入n=3,则从1,2,3,一直打印到999 陷阱:若使用循环遍历 1- 999...9 并依次输出,当位数n过大时,无论将其存入int或long或 ...

  7. 大数问题:打印从1到最大的n位数

    //打印从1到最大的n位数:大数问题,用字符串表示数字来避免溢出 bool increment(char* number){ bool isOverFlow = false; int nTakeOve ...

  8. 剑指 Offer 17. 打印从1到最大的n位数

    剑指 Offer 17. 打印从1到最大的n位数 Offer 17 题目解析: 暴力解法 package com.walegarrett.offer; /** * @Author WaleGarret ...

  9. 力扣 - 剑指 Offer 17. 打印从1到最大的n位数

    题目 剑指 Offer 17. 打印从1到最大的n位数 思路1 如果有n位,那么最大值就是\(10^n-1\),即如果n是2,那么最大就到输出到99 考虑到大数情况,所以使用字符数组 还要把字符数组转 ...

随机推荐

  1. SSM框架出现500的错误解决办法

    1,先确认pom.xml中有没有导入项目依赖, 2,发现导入之后还是报500.点击File->Project  Structure->Artifacts 点击SSM右键,选择put int ...

  2. Java中时间加减的比较

    public class TestDate{ public static void main(String[] args){try{ Date date=new Date(); DateFormat  ...

  3. SQL中的ON DUPLICATE KEY UPDATE使用详解

    一:主键索引,唯一索引和普通索引的关系主键索引 主键索引是唯一索引的特殊类型. 数据库表通常有一列或列组合,其值用来唯一标识表中的每一行.该列称为表的主键. 在数据库关系图中为表定义一个主键将自动创建 ...

  4. SpringBoot启动源码及自定义starter

    为什么springboot工程能够在mian方法中完成启动呢?需要大家掌握的有几个点:1.SPISPI在springboot中是去读取META-INF/spring.factories目录的配置文件内 ...

  5. springboot Jar包开启远程调试

    jar 正常启动 java -jar rest-demo-0.0.1-SNAPSHOT.jar 开启DEBUG模式需追加参数 java -Xdebug -Xrunjdwp:server=y,trans ...

  6. Django项目中集成第三方登录时出现的错误

    原以为是被反爬 没想到 总结:这里的http应该是https协议,以后要更加小心 了,不能犯这种低级错误

  7. 小白入门NAS—快速搭建私有云教程系列(一)

    什么是NAS 在日常的工作生活中,我们有大量的资料.文件需要存储在电脑或者其他终端设备中,但是这种方式需要电脑配备高容量的硬盘,而且需要随时随地的带着,这样是不是很麻烦? 那么,今天,我来介绍一种家庭 ...

  8. unicode键盘编码表

    键盘uniCode编码 功能键:       8 ==>   Backspace             9 ==>   Tab             12==>   Clear ...

  9. 状压DP之吃奶酪

    题目 传送们 思路 1≤n≤15,妥妥的状压,数据这么小, 这道题的状压思路还是很好想的,我们定义f[i][s]代表以i为起点,吃掉状态为s的奶酪所需要跑的最短距离,那么显然,我们先枚举状态s,然后枚 ...

  10. P2607[ZJOI2008] 骑士 题解

    题目 Z 国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的 Y 国发动了一场针对 Z 国的侵略战争.战火绵延五 ...