面试题十七:打印从1到最大的n位数
输入数字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位数的更多相关文章
- 【剑指offer】面试题 17. 打印从 1 到最大的 n 位数
面试题 17. 打印从 1 到最大的 n 位数 题目描述 题目:输入数字 n,按顺序打印出从 1 最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数即 999. 解答过 ...
- 《剑指offer》面试题17. 打印从1到最大的n位数
问题描述 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 示例 1: 输入: n = 1 输出: [1,2,3,4,5 ...
- 面试题17.打印从1到最大的n位数
void print_n_number(int n){ if(n<=0){ cout<<"fuckyou"; return; } string s="1 ...
- 面试题12:打印1到最大的n位数
// 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...
- 算法笔记_189:历届试题 横向打印二叉树(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树 ...
- 剑指Offer:打印从1到最大的n位数
题目:输入数值n,按顺序打印从1到最大的n位数,例如输入n=3,则从1,2,3,一直打印到999 陷阱:若使用循环遍历 1- 999...9 并依次输出,当位数n过大时,无论将其存入int或long或 ...
- 大数问题:打印从1到最大的n位数
//打印从1到最大的n位数:大数问题,用字符串表示数字来避免溢出 bool increment(char* number){ bool isOverFlow = false; int nTakeOve ...
- 剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数 Offer 17 题目解析: 暴力解法 package com.walegarrett.offer; /** * @Author WaleGarret ...
- 力扣 - 剑指 Offer 17. 打印从1到最大的n位数
题目 剑指 Offer 17. 打印从1到最大的n位数 思路1 如果有n位,那么最大值就是\(10^n-1\),即如果n是2,那么最大就到输出到99 考虑到大数情况,所以使用字符数组 还要把字符数组转 ...
随机推荐
- node+ajax实战案例(3)
3.用户注册实现 3.1.注册用户功能的实现逻辑 1 用户在表单上输入注册信息 2 点击注册后,收集用户在表单上输入的注册信息并且发送给后台 3 后台接收用户发送过来的注册信息 4 后台需要处理数据并 ...
- 03 . Shell数组和函数
Shell数组 简介 数组中可以存放多个值.Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似). 与大部分编程语言类似,数组元素的下标由0开始. S ...
- 2020年Web前端开发工程师市场怎么样?学会什么技术才能拿到高薪
几乎整个互联网行业都缺前端工程师,不仅在刚起步的创业公司,对上市公司乃至巨头这个问题也一样存在.据统计,国外的前端开发人员和后端开发人员比例约1:1,但是在国内比例却在1:3以下, Web前端开发职位 ...
- Java 内存分析之mat安装
有三款内存分析的工具 免费 VisualVM MAT 下载地址https://www.eclipse.org/mat/ mac 下面 under the current working directo ...
- Oracle 11g数据脱敏
Oracle 11g数据脱敏 前言 最近开发人员有个需求,导一份生产库的数据到测试库. 由于生产数据安全需要,需要并允许对导出的数据进行加密脱敏处理. 关于加密和脱敏 个人理解, 加密是通过一系列规则 ...
- Python 简明教程 --- 22,Python 闭包与装饰器
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 当你选择了一种语言,意味着你还选择了一组技术.一个社区. 目录 本节我们来介绍闭包与装饰器. 闭包与 ...
- css定义变量_css原生变量的使用和兼容 附带还有更高性能,文件更高压缩率的好处
在开发中,css样式有一些属性往往需要重复使用,为了避免代码冗余,降低维护成本.我们需要使用CSS预编译工具[Sass/Less/Stylus],随着这些工具的流行,CSS变量也开始规范制定,目前很多 ...
- 使用现代CSS的响应式版面
为一个网站选择类型尺寸是项艰巨的任务. 标题和段落的尺寸在网页布局和可读性方面处理起来很棘手. 谢天谢地, 我们有模块化缩放可以引导我们. 模块化缩放是一个数字序列以某种方式关联另一个序列. Tim ...
- antd图标库按需加载的插件实现
前景概要 antd是阿里出品的一款基于antd的UI组件库,使用简单,功能丰富,被广泛应用在中台项目开发中,虽然也出现了彩蛋事故,但不能否认antd本身的优秀,而我们公司在实际工作中也大量使用antd ...
- STA树的深度(树型DP)
STA树的深度 题目大意 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Outpu ...