剑指offer、牛客-打印1到最大的n位数

牛客 剑指offer_编程题 详细题解 (已完结) 文章目录剑指offer_编程题【1.二维数组中的查找】【2.替换空格】C++JAVA【3.从尾到头打印链表】【4.重建二叉树】【5.用两个栈实现队列】【6.旋转数组的最小数字】暴力Sort二分法【7.斐波那契数列】【8.跳台阶】【9.变态跳台阶】 剑指offer_编程题 【1.二维数组中的查找】 【题目描述】 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都... 阅读详情

思路:直接使用int进行遍历,int有边界(使用数组模拟,或者使用全排列)

1 数组模拟法


public class Solution {
    public void printToMaxOfNDedits(int n){
        if(n < 0)
            return;
        if (n ==0 ){
            System.out.println("0");
        }
        char [] num = new char[n];
        //初始化
        for (int i = 0; i < num.length; i++) {
            num[i] = '0';
        }
        while(!increment(num)){
            print(num);
        }
    }
    private static boolean increment(char [] num){
        boolean isEnd = false;
        int len = num.length;
        int nTakeOver = 0;//进位
        for (int i = len - 1; i >= 0 ; i--) {
            int nSum = num[i] - '0' + nTakeOver;//当前值
            //只有是个位时,数值加1
            if(i == len - 1)
                nSum++;
            //满10进1
            if (nSum > 9){
                if(i == 0){
                    //超过n位
                    isEnd = true;
                }else {
                    nTakeOver = 1;
                    num[i] = '0';
                }
            }else {
                num[i] = (char) ('0' + nSum);
                break;
            }
        }
        return isEnd;
    }
    private static void print(char [] num){
        StringBuilder str = new StringBuilder();
        boolean isBegin = false;
        int len = num.length;
        for (int i = 0; i < len; i++) {
            if(num[i] != '0' && !isBegin){
                isBegin = true;
            }
            if (isBegin){
                str.append(String.valueOf(num[i]));
            }
        }

        if(str.toString().matches("^9+$")){
            System.out.println(str.toString()+" ");
        } else {
            System.out.print(str.toString()+" ");
        }
    }

}

2 全排列代替法

public class Solution {
    public void printToMaxOfNDedits(int n){
        if(n < 0)
            return;
        if (n == 0 ){
            System.out.println("0");
            return;
        }
        char [] num = new char[n];
        //初始化
        for (int i = 0; i < num.length; i++) {
            num[i] = '0';
        }
        for (int i = 0; i < 10; i++) {
            num[0] = (char) ('0' + i);
            printToMaxOfNDeditsRecurstively(num, n, 0);
        }
    }
    private static void printToMaxOfNDeditsRecurstively(char [] num,int length, int index){
        if(index == length - 1){
            print(num);
            return;
        }
        for (int i = 0; i < 10; i++) {
            num[index + 1] = (char)(i + '0');
            printToMaxOfNDeditsRecurstively(num, length, index + 1);
        }
    }
    private static void print(char [] num){
        StringBuilder str = new StringBuilder();
        boolean isBegin = false;
        int len = num.length;
        for (int i = 0; i < len; i++) {
            if(num[i] != '0' && !isBegin){
                isBegin = true;
            }
            if (isBegin){
                str.append(String.valueOf(num[i]));
            }
        }
        if(str.toString().matches("^9+$")){
            System.out.println(str.toString()+" ");
        } else {
            System.out.print(str.toString()+" ");
        }
    }
}

扩展:char 最多能标识256个字符,十进制数:只用到10个,没有充分利用内存,有更高效的方式吗?有改char为byte

public class Solution {
    public void printToMaxOfNDedits(int n){
        if(n < 0)
            return;
        if (n ==0 ){
            System.out.println("0");
        }
        byte [] num = new byte[n];
        //初始化
        for (int i = 0; i < num.length; i++) {
            num[i] = 0;
        }
        while(!increment(num)){
            print(num);
        }
    }
    private static boolean increment(byte [] num){
        boolean isEnd = false;
        int len = num.length;
        byte nTakeOver = 0;//进位
        for (int i = len - 1; i >= 0 ; i--) {
            byte nSum = (byte) (num[i]  + nTakeOver);//byte相加,需要强转
            //只有是个位时,数值加1
            if(i == len - 1)
                nSum++;
            //满10进1
            if (nSum > 9){
                if(i == 0){
                    //超过n位
                    isEnd = true;
                }else {
                    nTakeOver = 1;
                    num[i] = 0;
                }
            }else {
                num[i] = nSum;
                break;
            }
        }
        return isEnd;
    }
    private static void print(byte [] num){
        StringBuilder str = new StringBuilder();
        boolean isBegin = false;
        int len = num.length;
        for (int i = 0; i < len; i++) {
            if(num[i] != 0 && !isBegin){
                isBegin = true;
            }
            if (isBegin){
                str.append(String.valueOf(num[i]));
            }
        }

        if(str.toString().matches("^9+$")){
            System.out.println(str.toString()+" ");
        } else {
            System.out.print(str.toString()+" ");
        }
    }
}





剑指Offer(java版)全部运行通过 所以的题与牛客网配套,所有的代码都是本人敲过,运行通过的。 立即下载

相关推荐

避开这5个坑!Tushare金融数据获取与分析的常见错误排查指南

本文详细解析了使用Tushare进行金融数据获取与分析时常见的5个问题,包括Token失效、数据缺失、频率限制、数据一致性和性能瓶颈,并提供了实用的解决方案和优化策略。通过Python代码示例和最佳实践,帮助金融数据分析师和量化开发者高效避开这些陷阱,提升工作效率。

x2y3z4a5b的博客 1037

牛客网剑指offer(Python版)

目录 第一题:二维数组中的查找 第二题:替换空格 第三题:从头到尾打印链表 第四题:重建二叉树 第五题:用两个栈来实现一个队列 第六题:旋转数组的最小数字 第七题:斐波那契数列 第一题:二维数组中的查找 解题思路:从左下角元素往上查找,右边元素是比这个元素大,上边是的元素比这个元素小。于是,target比这个元素小就往上找,比这个元素大就往右找。如果出了边界,则说明二...

hitzijiyingcai的博客 1万+

【NLP】文献翻译4——CH-SIMS:中文多模态情感分析数据集与细粒度的模态注释

CH-SIMS: A Chinese Multimodal Sentiment Analysis Dataset with Fine-grained Annotations of Modality摘要1. 介绍2. 相关工作2.1 多模态数据集2.2 多模态情感分析2.3 多任务学习3. CH-SIMS 数据集3.1 数据获取3.2 标注3.3 特征提取4. 多模式多任务学习框架4.1 单模态子网4.2 特征融合网络4.3 优化目标5. 实验5.1 基准5.2 实验的细节5.3 结果和讨论5.3.1 与

YoungSeng's Blog 1万+

牛客网剑指offer总结(一)(c++)

创建新链表存储合并后的链表,从头到尾循环读取两个链表每个结点的值并比较大小,按照排序顺序存储到新链表,当其中一个链表读取完毕,随后将另一个链表剩下未被读取的结点值直接存储到新链表即可。在旧链表的每个节点之后都添加一个结点,其新的结点值与旧链表的结点值相同,随后按照旧链表的链接方向,在新节点上进行链接,最后从中拆分出新链表即可。找到当前链表结点的前驱节点及后继节点,将当前节点的前驱节点与后继节点进行交换即可,循环整条链表的每个节点。借助一个数组,将链表结点值存放到这个数组中,随后将数组反向输出。

guet+第4组+2021 341

torchsparse安装

torchsparse安装以及安装失败原因分析和解决

AI_BING_的博客 1万+

【HAL库-STM】智能温控按键小风扇【胎教级教学】

硬件设备:DHT11,0.96寸oled屏,二/三/四线风扇(不挑),面包板 、f10的精英板等等。当人在的风扇面前时可以自行控制风扇,不在面前时又想开风扇就让他温控自行开启,(在这里有一个想法就是加上蓝牙和wifi控制的功能能够远程遥控,这个如果做的再全一点就要自主研发是一个多功能app,这里没有做。针对这个dht11,我一开始是卡在了这个check函数里面,一直是我给完dht11低电平和高电平后,dht11不回复我低电平和高电平,这个不是我的问题,当时代码是没毛病的,这个点一直卡着我。吐血五天实现小成品

weixin_52451652的博客 1741

牛客刷题篇——剑指offer (第二期)

保姆级教学 剑指offer第二篇 一条龙服务

weixin_59796310的博客 1320

VQGAN实战:从文本到高清图像的保姆级生成教程(含PyTorch代码)

本文详细介绍了VQGAN(Vector Quantized Generative Adversarial Network)在文本到高清图像生成中的应用,提供了从环境配置到模型加载、文本编码及图像生成的完整PyTorch代码教程。通过实战案例和高级调优技巧,帮助开发者快速掌握VQGAN的核心技术,实现百万像素级的高清图像生成。

u8v9w0x1y的博客 649

刷题笔记 | 剑指offer-JZ38(字符串的排列)

剑指offer-JZ38(字符串的排列)

qq_36291615的博客 554

超频玩家必看:TestMem5配置文件详解与内存稳定性测试实战(含黄金参数包)

本文详细解析了TestMem5(TM5)在内存超频稳定性测试中的核心价值与实战应用,特别针对DRAM颗粒特性提供黄金参数配置。通过anta777等专业配置的深度剖析,指导超频玩家精准定位内存故障,优化时序参数,实现性能与稳定性的完美平衡。涵盖从初级验证到极限压测的全流程方案,是硬件发烧友提升系统稳定性的必备指南。

weixin_29198045的博客 1817

工业相机的检测原理课件(建议收藏)

本课件为各位工程师详细介绍了工业相机的视觉检测原理 ,旨在为工程师调试工业相机的视觉检测原理时提供理论性指导。

Bamboo265925的博客 498

牛客刷题——剑指offer(第三期)

牛客刷题——剑指offer(第三期) 保姆级教程 一条龙服务~

weixin_59796310的博客 1398

Halcon那些事:Halcon缺陷检测检测印刷数字完整性

创建模板 create_shape_model模板匹配 find_shape_model。

十多年IT经验,专注机器视觉,智能制造半导体行业 766

【牛客 - 剑指offer】JZ17 打印从1到最大的n位数 Java实现

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

guliguliguliguli的博客 210

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

牛客剑指Offer面试题17:打印从1到最大的n位数(牛客无)

1.注意字符型常量和整型数值之间转换: (1)某个字符c进行减’0’操作得到c的整型数值.如代码中number[i] - ’ 0 ’ 得到number[i]的整型数值 (2)相反的,某个整型数值加’0’得到该数值对应的字符.如代码中number[i] = ‘0’ + nSum 2.每次Increment函数都会返回一个是否溢出的标识(即达到了最大的n位数)并且在Increment函数中执行对字符串...

ljmiiianng的博客 197

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

牛客-剑指offer系列题解:打印从1到最大的n位数

记录刷题的过程。牛客和力扣中都有相关题目,此篇博客是力扣的题目描述。该系列默认采用python语言。 1、问题描述: 2、数据结构: 数组 3、题解: class Solution: def printNumbers(self, n: int) -> List[int]: return list(range(1, 10**n)) 递归,转化为字符串去解 class...

weixin_42042056的博客 265

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

剑指Offer(牛客版)--面试题17:打印从1到最大的n位数

题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。 分析: 假设 n=2, 从高位开始遍历,高位设置为0,然后跳到低位,低位从0开始设置到9,低位满9,则高位加1,低位则又开始从0设置到9,一直重复下去,直到找到最大的n位数。(如图) 完整代码: #include<iostream>...

汤姆鱼 651

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

问题:输入数字n,按顺序打印出从1到最大的n位十进制数。 输入:n 输出:打印数字 思路: 易错思路:求出最大的n位十进制数,然后for循环打印。 错误原因:最大的n位十进制数有可能超出int型(或longlong型)。 利用数组(或字符串)来表达大数。 代码: #include <iostream> #include <string.h> using...

Black Mamba的博客 272

牛客网《剑指offer》专栏刷题练习之数组专精

🔥前言 今天分享牛客网《剑指offer》专栏里的经典数组算法题的题解,从解题思路到具体代码解释步步到位。

叶落秋白的博客 1519

OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理

​在部分大厂笔试时经常会使用OJ题目,这里对《华为机试》和《剑指offer》中的部分题目进行思路分析和讲解

luming的博客 1079

《剑指offer》17--打印从 1 到最大的 n 位数[C++]

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

贫道绝缘子的博客 435

【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数

由于没有限定输入两个数的大小范围,我们也要把它当作大数来处理。在第一个思路中,实现了在字符串表示的数字上加 1 的功能,可以参考这个思路实现两个数字的相加功能。

Elena's Blog 1071

剑指offer第2版:数学+模拟+贪心

    一旦分出一段长度为1的小段,只会减少总长度,还不能增加乘积,因此长度为2的绳子不分比分开的乘积大,长度为3的绳子不分比分开的乘积大  所以这3个都要特殊分析       长度为4的绳子分成2*2比较大。前面的我们都可以通过这样递推得到,后面的同样递推!如果我有一个长度为n的绳子,我们剪一刀的话,绳子可能会变成1和n-1的组合  或者2和n-2的组合,所以我们只要找到max(dp[i-j]*dp[j])即可(算一半就行)  

weixin_51142926的博客 2346

《剑指offer》刷题笔记(代码完整性):打印1到最大的n位数

《剑指offer》刷题笔记(代码完整性):打印1到最大的n位数 转载请注明作者和出处:http://blog.youkuaiyun.com/u011475210 代码地址:https://github.com/WordZzzz/CodingInterviewChinese2 文章地址:https://github.com/WordZzzz/Note/tree/master/AtOffer

WordZzzz 1929

剑指Offer--题集目录索引

链接 牛客OJ 九度OJ 优快云题解 GitHub代码 牛客剑指Offer题目列表 九度OJ剑指Offer题目列表 CodingInterviews–剑指Offer–名企面试官精讲典型编程题 牛客OJ 九度OJ 优快云题解 GitHub代码 003–二维数组中的查找 1384-二维数组中的查找 剑指Offer–003–二维数组中的查找

OSKernelLAB(gatieme) 1万+

20190326 剑指offer 解题思路整理(一)

20190326 剑指offer 解题思路整理 面试题19 正则表达式匹配 思路:string和pattern匹配,普通情况是一旦当前指向string的字符与当前指向pattern的字符相同时,两个指针都向前加1,特殊情况就是’ . ‘和’ * '分别可以实现任意字符匹配和任意次数匹配,此时可以选择不匹配(s,p+1)也可以选择匹配一次(s+1,p+2)也可以选择匹配多次(s+1,p)。 注意...

xixixijoylife的博客 242
上一篇: 剑指offer、牛客-数值的整数次方
下一篇: Node.js入门
Yes_JiangShuai
博客等级 码龄10年 149粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值