算法的学习笔记—数字序列中的某一位数字(牛客JZ44)

server/2024/9/22 15:58:44/

img

😀前言
在编程面试中,遇到的问题往往需要我们高效处理大规模的数据或序列。今天我们要讨论的是一个典型的问题:如何在一个连续的数字序列中找到指定位置的数字。

🏠个人主页:尘觉主页

文章目录

  • 😀数字序列中的某一位数字
    • 问题描述
      • 示例
    • 😊解题思路
    • 🥰具体实现
        • 1. 找到目标所在的位数段
        • 2. 计算该段中具体的数字
        • 3. 提取数字的具体位置
      • 代码解析
    • 😄总结

😀数字序列中的某一位数字

数字序列中某一位的数字_牛客题霸_牛客网 (nowcoder.com)

问题描述

给定一个序列,它是由所有非负整数按顺序排列而成,如 0123456789101112131415...。现在,给定一个索引 index,我们需要找到这个序列中第 index 位的数字。

示例

  • 输入:index = 5
  • 输出:5

在序列 012345678910111213... 中,第 5 位对应的数字正是 5

😊解题思路

要解决这个问题,首先要认识到直接生成整个序列并索引显然不可行,因为生成的字符串会非常大。因此,我们需要找到一种不需要生成整个序列的方式,直接定位到我们需要的数字。

我们可以将序列分为不同的段,每一段由固定位数的数字组成。举个例子:

  • 1 位数:0, 1, 2, ..., 9(共有 10 个数字)
  • 2 位数:10, 11, 12, ..., 99(共有 90 个数字)
  • 3 位数:100, 101, ..., 999(共有 900 个数字)

🥰具体实现

1. 找到目标所在的位数段

首先,我们需要确定目标数字所在的位数段。例如,如果索引在 1 位数范围内,我们直接返回对应数字即可;如果不在,则将索引减去这一段的长度,继续判断它是否在 2 位数段,依此类推。

2. 计算该段中具体的数字

确定了位数段后,我们可以计算出目标数字具体是该段中的哪个数字。通过简单的除法计算可以得到它是该段中的第几个数字。

3. 提取数字的具体位置

最后,在确定了具体的数字后,我们可以提取它在字符串中的具体位置。

以下是代码实现:

public int getDigitAtIndex(int index) {if (index < 0)return -1;int place = 1;  // 1 表示个位,2 表示 十位...while (true) {int amount = getAmountOfPlace(place);int totalAmount = amount * place;if (index < totalAmount)return getDigitAtIndex(index, place);index -= totalAmount;place++;}
}/*** place 位数的数字组成的字符串长度* 10, 90, 900, ...*/
private int getAmountOfPlace(int place) {if (place == 1)return 10;return (int) Math.pow(10, place - 1) * 9;
}/*** place 位数的起始数字* 0, 10, 100, ...*/
private int getBeginNumberOfPlace(int place) {if (place == 1)return 0;return (int) Math.pow(10, place - 1);
}/*** 在 place 位数组成的字符串中,第 index 个数*/
private int getDigitAtIndex(int index, int place) {int beginNumber = getBeginNumberOfPlace(place);int shiftNumber = index / place;String number = (beginNumber + shiftNumber) + "";int count = index % place;return number.charAt(count) - '0';
}

代码解析

  1. getDigitAtIndex(int index):这个方法是主函数,负责找到对应的数字。我们首先确定数字的位数段,然后进入这个段查找具体的数字。
  2. getAmountOfPlace(int place):这个方法计算当前位数段的数字个数。例如,1 位数段有 10 个数字(0 到 9),2 位数段有 90 个数字(10 到 99)。
  3. getBeginNumberOfPlace(int place):这个方法返回当前位数段的起始数字。例如,1 位数段从 0 开始,2 位数段从 10 开始。
  4. getDigitAtIndex(int index, int place):这个方法根据索引计算出目标数字,并返回它在目标字符串中的具体位置。

😄总结

通过上述步骤,我们可以在不需要生成完整序列的前提下,快速定位并获取任意索引位置的数字。该方法时间复杂度为 O(log n),适用于处理大规模数据。无论是在实际开发中,还是在面试中,这种解题思路都具有较高的实用性。

😁热门专栏推荐
学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img


http://www.ppmy.cn/server/108375.html

相关文章

使用Hutool操作Excel的时候出现的问题(压缩比问题)

今天在使用Hutool操作Excel的时候&#xff0c;出现了一个问题&#xff0c;导致操作失败。 错误原因如下&#xff1a; cn.hutool.poi.exceptions.POIException: IOException: Zip bomb detected! The file would exceed the max. ratio of compressed file size to the size o…

C语言深度复习【数组和指针】

目录 一.数组和指针 1.1 数组指针 1.2 指针数组 1.3 函数指针 1.4 const和指针 1.5 sizeof和指针和数组 1.6 strlen和字符数组 一.数组和指针 1.1 数组指针 一个数组指针实际上是指指向数组的指针。当你有一个数组类型作为函数参数时&#xff0c;它在函数内部被当作一个…

oracle物理存储结构文件详解

文章目录 oracle物理文件结构图① 控制文件&#xff1a;② 数据文件&#xff1a;③ 联机Redo日志文件&#xff1a;④ 参数文件&#xff1a;⑤ 归档文件&#xff1a;⑥ 密码文件&#xff1a; oracle物理文件结构图 Oracle数据库的物理结构由控制文件&#xff08;Control f…

C#性能驱动的内存处理:使用 Span<T> 和 Memory<T> 提升代码效率

本文示例内容&#xff1a; 分割数据&#xff1a;示例中将一个整数数组分割成两个部分&#xff0c;展示了如何使用 Span<T>.Slice 方法来获取数组的不同切片。计算数据&#xff1a;计算数组每个部分的总和&#xff0c;展示了如何利用 Span<T> 来遍历和处理数据。修…

小阿轩yx-Kubernetes存储入门

小阿轩yx-Kubernetes存储入门 前言 数据是一个企业的发展核心&#xff0c;它涉及到数据存储和数据交换的内容。在生产环境中尤为重要的一部分在 Kubernetes 中另一个重要的概念就是数据持久化 Volume。 Volume 的概念 对多数项目而言 数据文件的存储是非常常见的 在 Kube…

VBA技术资料MF180:将某个文件夹中的某类图片导入Word

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

备战秋招60天算法挑战,Day26

题目链接&#xff1a; https://leetcode.cn/problems/jump-game/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1gwYKekEVN/ LeetCode 55. 跳跃游戏 题目描述 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该…

python基础学习(最终篇)

文章目录 JSON的基础使用一. JSON简介二. JSON语法规则三. JSON数据类型四. JSON对象五. JSON数组六. JSON函数1. json.dumps2. json.loads3. json.dump4. json.load5. encode6. decode7. 参数说明 总结 JSON的基础使用 一. JSON简介 JSON(JavaScript Object Notation) 是一种…