博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer面试题12-打印1到最大的n位数
阅读量:6208 次
发布时间:2019-06-21

本文共 1234 字,大约阅读时间需要 4 分钟。

题目:

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

这道题的主要陷阱就在大数的处理,仅仅要将这个考虑进去,用字符串来表示。就好说了。

那差点儿相同代码是这样子的:

public void print1(int n) {		if (n < 0) {			throw new RuntimeException();		}		char[] number = new char[n];		// 初始化全部的数都为'0'		initNumber(number);		// 假设没有达到'99..',而且递增		while (increaseNumber(number)) {			// 打印			printNumber(number);		}	}

1.怎么初始化呢?

这个简单:

private void initNumber(char[] number) {		for (int i = 0; i < number.length; i++) {			number[i] = '0';		}	}

2.怎么打印?

到时候肯定有非常多00011这样0开头的数字

假设0开头就不打印0。到了不是0开头的,就打印后面的

private void printNumber(char[] number) {		boolean flag = false;		for (int i = 0; i < number.length; i++) {			if (number[i] != '0') {				flag = true;			}			if (number[i] != '0' || flag) {				System.out.print(number[i]);			}		}		System.out.println();	}

3.怎么递增,而且当增到某个999的时候返回false,事实上时候返回true?

3.1先是怎样递增:

那就模拟数字的递增:给最后位上加一。假设大于9了,就再往上一位加1,一直往上。

3.2怎样返回true。

false

接着递增的说,比方一个长度n=3的数,最后一位加1,大于9了前一位再加一。

也就仅仅有当999加1的时候,遍历从i=0到i<3最后结果还是大于9的,所以就能够依据这个来确定返回值。

private boolean increaseNumber(char[] number) {		for (int i = number.length - 1; i >= 0; i--) {			number[i] = (char) (number[i] + 1);			if (number[i] > '9') {				number[i] = (char) (number[i] - 10);			} else {				return true;			}		}		return false;	}

转载地址:http://sczja.baihongyu.com/

你可能感兴趣的文章
Unity 2018.2之粒子
查看>>
阿里云ECS服务器配置全攻略
查看>>
谈谈交叉熵损失函数
查看>>
什么样的经历,才能领悟成为架构师?
查看>>
基于async/non-blocking高性能redis组件库BeetleX.Redis
查看>>
Spring Batch 基本的批处理指导原则
查看>>
一个中心+三大原则 -- 阿里巴巴小蜜这样做智能对话开发平台
查看>>
博客搬家
查看>>
python实现希尔排序算法
查看>>
logdna过滤log file
查看>>
计算机科学三大定律和网络三大定律
查看>>
wordpress升级后后悔了可以使用插件将wordpress降级为低版本
查看>>
好程序员web前端分享HTML5 video事件应用示例
查看>>
实时计算无线数据分析
查看>>
升级check SQL01
查看>>
美国西北大学联合AI创企Eko,推出心脏杂音AI筛查算法
查看>>
新零售讲堂之关于新零售,或许你理解错了?
查看>>
day68_淘淘商城项目_01
查看>>
python 基础
查看>>
语祯物联获盈动资本领投600万元天使轮融资,希望未来可以管理全世界的机器...
查看>>