剑指 Offer 17. 打印从1到最大的n位数

news2024/10/1 23:47:43

题目

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

在这里插入图片描述

思路

本题应该考虑的是大数问题,但是返回数组为int[]。。。所以两种方法都做一下

方法一:普通解法(不考虑大数问题)

枚举从 110^n - 1,返回int数组

class Solution{
	public int[] printNumbers(int n){
		int[] res = new int[(int) Math.pow(10,n) - 1];
		for(int i = 0; i < res.length; i++){
			res[i] = i + 1;
		}
		return res;
	}
}

方法二:全排列解法

在数字很大的情况下,哪怕long类型也无法承载,那必须要用字符串保存。 对于本题其实就是对数字1位数到n位数0 ~ 9的全排列,其中要注意的是数字开头不应该有0。

为了能够测试通过,最后把字符串形式变成了int形式,其实应该返回字符串数组 (力扣的问题)

算法流程:

  1. 为了避免数字开头出现0,先把首位first固定,first取值范围为1~9
  2. digit表示要生成的数字的位数,本题要从1位数一直生成到n位数,对每种数字的位数都生成一下首位,所以有个双重for循环
  3. 生成首位之后进入递归生成剩下的digit - 1位数,从0~9中取值
  4. 递归的中止条件为已经生成了digit位的数字,即index == digit,将此时的数num转为int加到结果res

java代码如下:

class Solution {
	int[] res;
	int count = 0;
	
	public int[] printNumbers(int n){
		// 考虑大数的全排列 回溯生成
		res = new int[(int)Math.pow(10,n) - 1];
		for(int digit = 1; digit <= n; digit++){// 数据位数遍历
			for(char first = '1'; first <= '9'; first++){// 首位选择 1-9
				char[] num = new char[digit];
				num[0] = first;
				dfs(1, num, digit);
			}
		}
		return res;
	}
	
	private void dfs(int index, char[] num, int digit){
		if(index == digit){
			res[count++] = Integer.parseInt(String.valueOf(num));
			return;
		}
		for(char i ='0'; i <= '9'; i++){
			num[index] = i;
			dfs(index + 1, num , digit);
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

天翼云服务器性能评测,4H8G贵阳节点性能跑分

天翼云号称全球运营商云第一、中国公有云用户数第二、政务云公有云第一。那么天翼云服务器用起来到底怎么样呢&#xff1f; 目前&#xff0c;蓝队云这边一共有19个天翼云节点云服务器&#xff0c;覆盖全国多个核心省市及地区&#xff0c;节点选择的话一般就是按照就近原则。 …

权威报告出炉:2022年移动机器人出货量增长53%!2023年移动机器人迎来发展新拐点?

原创/文 BFT机器人 近日&#xff0c;全球权威研究机构Interact Analysis重磅发布移动机器人领域的“风向标”——《2022年移动机器人市场报告》&#xff08;The Mobile Robot Market 2022&#xff09;&#xff0c;深入探究真实市场数据&#xff0c;对全球移动机器人领域的发展现…

当压力传感器遇到汽车电子系统 智芯传感打造车规级智能感知传感器产品

汽车电子系统是汽车数字化的发端和基础&#xff0c;更是汽车智能化的前提。近年来&#xff0c;伴随着汽车电子技术的快速发展与应用&#xff0c;汽车电子系统在车辆控制精度、范围、适应性和智能化等方面&#xff0c;都实现了大幅优化提升。而压力传感器作为汽车电子系统的主要…

RHCSA 第五天笔记

用户和组管理 用户分为三类&#xff1a; 超级用户 root 普通用户 只能切换到自己有的用户 系统用户&#xff08;不常用&#xff0c;没办法登录&#xff09; 组分为两类 定义概念 基本组&#xff08;私有组&#xff09; 没指定所属组&#xff0c;系统建立和用户同名的组 附加…

诺依文件上传支持阿里云oss

文章目录描述后端引入依赖application.yml 添加访问oss需要的参数编写oss工具类编写controller前端更改调用接口![在这里插入图片描述](https://img-blog.csdnimg.cn/efc28eb8244e4da482d46327ab29a999.png)去掉baseUrl回调成功后url改成真实urlmain.js中挂在该组件具体调用代码…

华为手表开发:GT3(1)配置调试设备

华为手表开发&#xff1a;GT3&#xff08;1&#xff09;配置调试设备初环境与设备获取手表UUID登录 AppGallery Connect 点击用户与访问初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统&#xff1a;window 设备&#xff1a;HUAWEI WATCH 3 Pro 开发工具&…

自动化测试到底该怎么学?

从功能测试到自动化测试 &#xff0c;待遇翻倍&#xff0c;我整理的超全学习指南&#xff01; 首选你需要拥有一个全网最牛最全面的软件测试全职业生涯进阶从零基础到测试开发学习路线图。 其次跟着大纲的内容慢慢学习&#xff0c;当然配套的【教学视频配套的学习资料】肯定是…

代码随想录二刷day4 24.两两交换链表中的结点 19.删除链表的倒数第n个结点 链表相交(环形链表)

二刷复习 文章目录二刷复习24.两两交换链表中的结点19.删除链表的倒数第n个结点链表相交环形链表224.两两交换链表中的结点 思路还是挺简单的&#xff0c;在纸上画一个图就行了 思考的过程&#xff1a; 1.我会思考需要用一个指针curr还是两个指针prev和curr&#xff0c;思考的…

利用 Nacos 实现了一个动态化线程池,非常实用

在后台开发中&#xff0c;会经常用到线程池技术&#xff0c;对于线程池核心参数的配置很大程度上依靠经验。然而&#xff0c;由于系统运行过程中存在的不确定性&#xff0c;我们很难一劳永逸地规划一个合理的线程池参数。在对线程池配置参数进行调整时&#xff0c;一般需要对服…

SegeX Automation:VC调用Golden Surfer自动化失败(VC调用Automation失败)原因详解

----哆啦刘小洋 原创&#xff0c;转载需说明出处 2022-12-29 SegeX Automation:Surfer自动化&#xff08;Automation&#xff09;失败原因1 简介2 初始化Surfer对象不成功2.1 一般代码2.1 改进代码3 Windows系统原因4 Surfer原因5 其他问题1 简介 在工程领域&#xff0c;Golde…

国产无线耳机什么牌子好?国产真无线蓝牙耳机排行

随着近几年蓝牙耳机市场的快速发展&#xff0c;蓝牙耳机依旧占据着半个行业的份额&#xff0c;在人们的日常生活中出现的频率也越来越高。叫得上名的国产蓝牙耳机牌子也越来越多&#xff0c;那么&#xff0c;国产无线耳机什么牌子好&#xff1f;下面&#xff0c;我来给大家推荐…

无代码资讯 | Gartner 预测明年低代码市场规模;微软推出低代码学习平台;AWS 推出开发无服务器应用的低代码平台

栏目导读&#xff1a;无代码资讯栏目从全球视角出发&#xff0c;带您了解无代码相关最新资讯。 TOP3 大事件 1、Gartner 预测到 2023 年&#xff0c;全球低代码市场预计达到269亿美元 根据 Gartner 的最新预测&#xff0c;到 2023 年全球低代码开发技术市场规模预计将达到 269…

hnu计网实验三-应用层和传输层协议分析(PacketTracer)

前言&#xff1a;难度适中的一个实验 一、实验目的 通过本实验&#xff0c;熟悉PacketTracer的使用&#xff0c;学习在PacketTracer中仿真分析应用层和传输层协议&#xff0c;进一步加深对协议工作过程的理解。 二、实验内容 研究应用层和传输层协议 从 PC 使用 URL 捕获 W…

多道程序与分时多任务--rCore[3]

概念 协作式操作系统 计算机硬件在快速发展&#xff0c;内存容量在逐渐增大&#xff0c;处理器的速度也在增加&#xff0c;外设 I/O 性能方面的进展不大。于是就想到&#xff0c;让应用在执行 I/O 操作或空闲时&#xff0c;可以主动 释放处理器 &#xff0c;让其他应用继续执行…

Linux- 系统随你玩之--grep查找文件内容

1、前言 我们在使用过程中经常需要对当前获取的文件进行过滤、提取和分析&#xff0c;以便快速查找到含有指定内容的文件或指定信息的那些行。本章我们继续深入了解有关文本检索的内容。 2、grep 查找文件内容 Linux系统中grep命令是一种强大的文本搜索工具&#xff0c;它能…

使用Loki收集网络设备日志

新钛云服已累计为您分享716篇技术干货前言Loki是Grafana Labs团队的开源项目&#xff0c;是一个水平可扩展&#xff0c;高可用性&#xff0c;多租户的日志聚合系统&#xff0c;它的设计非常简洁易于操作。受Prometheus启发的&#xff0c;可以水平扩展、高可用以及支持多租户的日…

S-HUB如何实现数据库对接WEBSERVICE API

近几年SAAS被大家逐步认可&#xff0c;越来越多的企业购买SAAS服务&#xff0c;但是仍然有很多自建各种业务系统&#xff0c;这些系统建设时一般都只考虑自身业务&#xff0c;而不是特别注重与别的系统之间的互联互通。而企业为了提升效率&#xff0c;又需要将这些业务与别的系…

Java开发 - 双向链表不可怕

前言 说起链表&#xff0c;那还是当初上学的时候学习的&#xff0c;印象里就觉得像锁链一样一环扣一环&#xff0c;后来工作后就几乎没实际接触过链表&#xff0c;每当遇到链表&#xff0c;总是不知道该怎么讲&#xff0c;因为对链表的本质一无所知。也是在学习了Java后&#…

剑指offer----C语言版----第三天

目录 1. 替换空格 1.1 题目描述 1.2 题目背景 1.3 必要的思考 1.4 思路一 1.5 思路二 1.6 思路三&#xff08;学方法&#xff09; 1.7 小试牛刀 1. 替换空格 原题链接&#xff1a;剑指 Offer 05. 替换空格 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/p…

回首2022,展望2023(年度总结)

回首2022&#xff0c;展望2023 热爱技术的伙计们&#xff1a; 哈喽&#xff0c;这篇文章经过一周左右的写写改改&#xff0c;在2022最后的工作日与大家见面&#xff0c;有人说总结是为了更好的开始。是的&#xff0c;一年的时间真的很快&#xff0c;马上就是2023了&#xff0…