Offer[17] 打印1到最大的n位数
Posted haoworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Offer[17] 打印1到最大的n位数相关的知识,希望对你有一定的参考价值。
题目描述
输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。
思路分析
- 要考虑到大数问题,我们要求的n位数是否的整数,这里明显没有限制n的大小,我们可以用字符串来打印n位数
- 我们需要做两件事情:
- 在字符串表达的数字上模拟+1 ,对字符串进行加一操作,注意停止加一的时机,即当最高位+1时,如果产生进位,则停止加1 ,比如:999+1
- 打印字符串表示的n为数,打印字符数组形成的数字,注意当遇到不是'0'的时候才开始打印
测试用例
- 功能测试(输入1,2,3……)
- 特殊输入测试(输入0,-1)
Java代码
public class Offer17
public static void main(String[] args)
System.out.println("功能测试--->");
test1();
System.out.println("特殊值测试--->");
test2();
public static void print1ToMaxOfNDigits(int n)
Solution1(n);
/**
* 用模拟加1 的方法
*
* @param n
*/
private static void Solution1(int n)
if (n <= 0)
throw new IllegalArgumentException("参数非法");
char[] number = new char[n];
Arrays.fill(number, '0');// 全部初始化为为'0'
while (!increment(number))
printCharNumber(number);
/**
* 对字符串进行加一操作,注意停止加一的时机,即当最高位+1时,如果产生进位,则停止加1 ,比如:999+1
*
* @param number
* @return
*/
private static boolean increment(char[] number)
boolean isOverflow = false; // 判断最高位是否产生进位,停止+1的条件
int nTakeOver = 0; // 产生的进位
// 数组从后往前遍历,数组后面的位表示数值的低位
for (int i = number.length - 1; i >= 0; i--)
int nSum = (number[i] - '0') + nTakeOver;
if (i == number.length - 1)
nSum++;
if (nSum >= 10)
if (i == 0) // 最高位
isOverflow = true;
else
nSum -= 10;
nTakeOver = 1;
number[i] = (char) ('0' + nSum);
else
number[i] = (char) ('0' + nSum);
break;
return isOverflow;
/**
* 打印字符数组形成的数字,注意当遇到不是'0'的时候才开始打印
*/
private static void printCharNumber(char[] number)
boolean isBeginning0 = true;
for (int i = 0; i < number.length; i++)
if (isBeginning0 && (number[i] - '0') != 0)
isBeginning0 = false;
if (!isBeginning0)
System.out.print(number[i]);
System.out.println();
private static void test1()
System.out.println("2---->");
print1ToMaxOfNDigits(2);
private static void test2()
System.out.println("-1---->");
print1ToMaxOfNDigits(-1);
System.out.println("0---->");
print1ToMaxOfNDigits(0);
代码链接
以上是关于Offer[17] 打印1到最大的n位数的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 17. 打印从1到最大的n位数 的详细题解
[LeetCode]剑指 Offer 17. 打印从1到最大的n位数