剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数
Offer 17
- 题目解析:
- 暴力解法
package com.walegarrett.offer;
/**
* @Author WaleGarrett
* @Date 2021/1/25 16:16
*/
public class Offer_17 {
public int[] printNumbers(int n) {
int maxlen = (int) Math.pow(10.0, n * 1.0);
maxlen -= 1;
int []result = new int[maxlen];
for(int i = 0; i< maxlen; i++){
result[i] = i+1;
}
return result;
}
}
- 字符串模拟大数解法:
class Solution {
int [] result;
int index = 0;
public int[] printNumbers(int n) {
StringBuilder num = new StringBuilder();
result = new int[ (int) (Math.pow(10.0, n * 1.0) - 1)];
for(int i=0; i<n; i++)
num.append('0');
while(!isOverFlow(num)){
printNums(num);
}
return result;
}
/**
* 用以判断是否溢出:例如3位数999,1000即表示溢出
* @param now
* @return
*/
boolean isOverFlow(StringBuilder now){
boolean isoverflow = false;
int carry = 0;
for(int i = now.length()-1; i >= 0; i--){
int current = Integer.parseInt("" + now.charAt(i)) + carry;
if(i == now.length() -1)
current += 1;
//将产生进位
if(current >= 10){
if(i == 0)
isoverflow = true;//产生溢出,到达首位
else{
carry = 1;
now.setCharAt(i, String.valueOf(current - 10).charAt(0));
}
}else{//没有产生进位
now.setCharAt(i, String.valueOf(current).charAt(0));
break;//没有进位则表示不用继续模拟加法了
}
}
return isoverflow;
}
void printNums(StringBuilder now){
boolean isZero = false;
String temp = "";
for(int i =0; i< now.length(); i++){
if(isZero && now.charAt(i) != '0')
isZero = false;
if(!isZero)
temp += now.charAt(i);
}
result[index++] = Integer.parseInt(temp);
}
}
- 全排列递归解法:
解题思路:
复杂度分析:
package com.walegarrett.offer;
/**
* @Author WaleGarrett
* @Date 2021/1/25 21:24
*/
public class Offer_17_2 {
int [] result;
int index = 0;
int n, start, nineNum;
char []chars;
public int[] printNumbers(int n) {
this.n = n;
start = n - 1;
chars = new char[n];
result = new int[ (int) (Math.pow(10.0, n * 1.0) - 1)];
nineNum = 0;
dfs(0);
return result;
}
void dfs(int cnt){
if(cnt == n){
//start表示起始数字,排除0开始的子串
String ans = String.valueOf(chars).substring(start);
if(!ans.equals("0"))
result[index++] = Integer.parseInt(ans);
if(n - start == nineNum)
start--;//需要进位
return;
}
for(int i=0; i<10; i++){
char now = String.valueOf(i).charAt(0);
if(i == 9)
nineNum++;//
//固定一个位数
chars[cnt] = now;
dfs(cnt + 1);
}
//结束循环,9的个数减一
nineNum--;
}
}
剑指 Offer 17. 打印从1到最大的n位数的更多相关文章
- 力扣 - 剑指 Offer 17. 打印从1到最大的n位数
题目 剑指 Offer 17. 打印从1到最大的n位数 思路1 如果有n位,那么最大值就是\(10^n-1\),即如果n是2,那么最大就到输出到99 考虑到大数情况,所以使用字符数组 还要把字符数组转 ...
- [LeetCode]剑指 Offer 17. 打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 示例 1: 输入: n = 1 输出: [1,2,3,4,5,6,7, ...
- 剑指Offer:打印从1到最大的n位数
题目:输入数值n,按顺序打印从1到最大的n位数,例如输入n=3,则从1,2,3,一直打印到999 陷阱:若使用循环遍历 1- 999...9 并依次输出,当位数n过大时,无论将其存入int或long或 ...
- 剑指offer——18打印从1到最大的n位数
题目: 输入数字n,按顺序打印出从1到最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数999. 题解: 注意大数溢出问题,故使用字符串更靠谱 class Solution { pu ...
- 【Java】 剑指offer(16) 打印1到最大的n位数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印 ...
- 【剑指offer】打印1到最大的n数字
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25562105 剑指offer第12题.九度OJ測试通过. 题目描写叙述: 给定一个数字N, ...
- 【Java】 剑指offer(17) 在O(1)时间删除链表结点
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除 ...
- 剑指OFFER之打印1到最大的N位数(九度OJ1515)
题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案例,输入一个数字N(1<=N<=5). 输出: 对应每个测试案例,依次打印从1到 ...
- 剑指offer(17)层次遍历树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. public class Solution { ArrayList<Integer> list = new ArrayLis ...
随机推荐
- 数组复制函数memcpy和strcpy
strcpy和memcpy主要有以下3方面的区别.1.复制的内容不同.strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组.整型.结构体.类等.2.复制的方法不同.strcpy不需 ...
- hdu 6863 Isomorphic Strings 哈希+求公因子
题意: t组输入,每组数据输入一个整数n,代表字符串长度.下面再输入一个字符串 你需要判断这个字符串能不能分成大于1段,且这些段的最小表示法是一样的 例如:abccab,它可以分成2段,分别是abc和 ...
- Tomacat目录以及服务器配置文件信息
一. 1.Tomacat的启动: 在我的windows10中我下载的是8.5版本的tomacat,我就是通过".sh"文件来打开和关闭tomacat 要打开.sh文件还需要 这个G ...
- 11.PowerShell DSC之安装PowerShell Module
打开https://powershellgallery.com,检索你需要的目标模块,我们以安装名为"xmysql"的module为例: 自动安装 1.执行命令install-mo ...
- 力扣567.字符串的排列—C语言实现
题目 来源:力扣(LeetCode)
- MYSQL查询和插入数据的流程是怎样的
一个查询语句经过哪些步骤 这次我们从MySQL的整体架构来讲SQL的执行过程,如下图: 在整体分为两部分Server和引擎层,这里引擎层我使用InnoDB去代替,引擎层的设计是插件形式的,可以任意替代 ...
- js 构造函数 & 静态方法 & 原型 & 实例方法
js 构造函数 & 静态方法 & 原型 & 实例方法 ES5 "use strict"; /** * * @author xgqfrms * @licens ...
- React useMemo
React useMemo react hooks https://reactjs.org/docs/hooks-reference.html#usememo useCallback & us ...
- 使用 mask 实现视频弹幕人物遮罩过滤
经常看一些 LOL 比赛直播的小伙伴,肯定都知道,在一些弹幕网站(Bilibili.虎牙)中,当人物与弹幕出现在一起的时候,弹幕会"巧妙"的躲到人物的下面,看着非常的智能. 简单的 ...
- iOS 兼容性处理
1. scroll滑动层,在iOS中滑动不流畅的处理 -webkit-overflow-scrolling:touch; //在滑动层标签添加这个样式 2. iOS 系统中input标签,去掉圆角效果 ...