剑指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版)全部运行通过 所以的题与牛客网配套,所有的代码都是本人敲过,运行通过的。 立即下载

相关推荐

如何利用Arcgis进行地统计学分析(三):空间插值方法选择与优化

本文深入探讨了在Arcgis中进行地统计学分析时,如何根据探索性数据分析(EDA)结果科学选择与优化空间插值方法。文章对比了IDW、RBF、克里金等主流方法的适用场景与核心参数,并通过实战案例详解了从数据诊断到模型调优的完整流程,强调结合半变异函数与趋势分析进行“对症下药”,以提升插值结果的精度与可靠性。

weixin_29281915的博客 121

牛客网剑指offer(Python版)

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

hitzijiyingcai的博客 1万+

Dify安装使用说明

dify可以说是一个功能不错的LLMOps,可以通过dify集中管理模型,可以通过界面创建AI应用,可以上传文档形成知识库,可以创建自定义工具(API),并可以对外提供API。相关功能类似Openai的GPTs或智谱的智能体,其他大厂的大模型也有类似功能,不过貌似只有dify是开源的。这就为个人本地部署AI应用提供了便利。

龙井茶的Sky 1万+

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

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

guet+第4组+2021 341

Ubuntu 22.04源码编译安装ROS Noetic

Ubuntu 22.04源码编译安装ROS Noetic

Drknown的博客 2万+

汽车电子RTOS--AUTOSAR OS

AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是AUTOSAR(汽车开放系统架构)标准中的一个重要组件,它是一个专门为汽车电子控制单元(ECU)设计的实时操作系统(RTOS)。AUTOSAR OS旨在提供一个标准化的软件平台,以促进不同供应商和汽车制造商之间的组件复用和协同开发,提高软件质量和降低成本。

MHD0815的博客 1798

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

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

weixin_59796310的博客 1320

Python控制TEMI1000/TEMI1500测试温箱

该温箱是我司从昆山振弘检测设备有限公司采购的TEMI 1000,但是控制器用的是韩国的,关于控温箱这个项目,可参考的资料仅有一份官方的manual,里面包含一些命令格式。只要你有温箱,就应该可以向厂家索取该文档。该温箱的通讯接口只有一个RS232接口,要想实现远程控制,需要有串口转USB的线;类似于下图所以,想依靠python来与之进行通信,还是要通过python 的pyserial库,关于怎么安装pyserial,过于简单,这里不做赘述,可自行百度。

xgh1951的博客 1万+

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

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

qq_36291615的博客 554

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

码农研究僧的博客 1万+

C++实现复制粘贴文本功能

要实现这个功能,我们需要使用操作系统提供的函数来操作剪贴板。在Windows操作系统中,我们可以使用Windows API函数来访问剪贴板。总结起来,使用C++实现复制和粘贴文本功能涉及使用操作系统提供的API函数来操作剪贴板。在本篇文章中,我将向您展示如何使用C++编程语言实现复制和粘贴文本的功能。我们将使用操作系统提供的API来进行剪贴板操作,并编写相应的代码来完成这个任务。如果您使用的是Linux操作系统,您需要使用适当的库和函数来访问剪贴板。函数中,我们首先将一个字符串复制到剪贴板中,然后使用。

PixelDyno的博客 1233

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

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

weixin_59796310的博客 1398

基于simulink创建一个针对双馈异步风力发电机并网运行的仿真模型

摘要:本文详细介绍了基于Simulink的双馈异步风力发电机(DFIG)并网运行仿真建模方法。系统包含风速输入、风力机、双馈发电机、电力电子变换器、控制器和并网接口等模块,通过8个步骤完整呈现了建模流程,包括风速模拟、机械功率计算、发电机特性建模、变流器控制策略设计等关键环节。仿真可评估系统在不同风速条件下的动态响应、最大功率跟踪能力和发电效率,为风力发电系统的优化设计提供有效验证手段。模型可根据实际需求扩展环境因素和电网交互等细节,提高仿真精度。

amy_mhd的博客 335

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

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

guliguliguliguli的博客 210

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

牛客剑指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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

牛客-剑指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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

剑指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、付费专栏及课程。

余额充值