力扣算法数学类—剑指 Offer 44. 数字序列中某一位的数字

news2024/9/22 15:52:26

目录

剑指 Offer 44. 数字序列中某一位的数字

题解:

代码:


数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。

请写一个函数,求任意第n位对应的数字。

示例 1:

输入:n = 3
输出:3
示例 2:

输入:n = 11
输出:0
 

限制:

0 <= n < 2^31

题解:

  • 首先,将n与10进行比较,判断n是否小于10。如果n小于10,说明n就是第n个数字,直接返回n。
  • 如果n大于等于10,进入循环。初始化变量m为1,表示当前位数为个位数;start为1,表示个位数的第一个数字为1;count为9,表示个位数的数字数量为9。
  • 进入循环,判断n是否大于count。如果n大于count,说明n所在的数字位数不是个位数,需要继续向上找。执行循环体内的代码。
  • 在循环体内,将n减去count,使n更新为剩余的数量。然后,将m加1,表示当前位数增加了一位。将start乘以10,表示下一位数的第一个数字。计算新的count,即m位数的数字数量。
  • 回到循环的开头,继续判断n是否大于count。如果n小于等于count,说明n所在的数字位数为m,退出循环。
  • 创建一个StringBuilder对象,用于构建结果数字的字符串表示。创建一个变量temp,并初始化为0,用于存储n在数字字符串中的索引位置。
  • 在条件判断中,判断n是否可以整除m。如果n可以整除m,说明n刚好位于所在数字的末尾。将start-1+n/m作为字符串添加到StringBuilder中。将temp更新为m-1。
  • 如果n不能整除m,说明n不位于数字的末尾。将start+n/m作为字符串添加到StringBuilder中。将temp更新为n%m-1。
  • 最后,通过返回sb.charAt(temp)-'0'的值,将索引temp处的字符转换为对应的整数值,并作为结果返回。
  • 总体思路就是通过循环来寻找n所在的位数m,并确定n所在的数字和在数字中的索引位置。然后,通过StringBuilder构建结果数字的字符串表示,并将目标数字转换为整数值返回。

代码:

class Solution {
    public int findNthDigit(int n) {
        if(n<10){
            return n;
        }
        int m = 1;  // 当前位数
        long start = 1;  // m 位数的第一个数字
        long count = 9;  // 当前位数的数字数量
        //找到n在几位数上
        while(n>count){
            n-=count;
            m++;
            start*=10;
            count=m*start*9;
        }
        StringBuilder sb=new StringBuilder();
        int temp=0;
        if(n%m==0){
            //找到n所在的数字
            sb.append(start-1+n/m);
            //n在这个数字的第几位(字符串从0开始计算,所以-1)
            temp=m-1;
        }else{
            //找到n所在的数字
            sb.append(start+n/m);
            //n在这个数字的第几位(字符串从0开始计算,所以-1)
            temp=n%m-1;
        }
        // -'0' 会将该字符和字符 '0' 进行减法运算。这是因为在字符的ASCII值中,字符 '0' 的值是 48。通过减去 '0',我们可以将字符 '0' 转换为整数 0,将字符 '1' 转换为整数 1,
        return sb.charAt(temp)-'0';

    }
}

结果:

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

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

相关文章

24考研数据结构-栈和队列的应用

目录 3.3.1栈在括号匹配中的应用流程图算法代码 3.3.2栈在表达式求值中的应用1. 中缀表达式 (需要界限符)2. 后缀表达式 (逆波兰表达式)中缀表达式转后缀表达式-手算重点&#xff1a;中缀表达式转后缀表达式-机算重点&#xff1a;后缀表达式的计算—机算 3.前缀表达式 (波兰表达…

Linux中Anaconda安装失败(Failed to execute script entry_point)的解决方法

Linux中Anaconda安装失败&#xff08;Failed to execute script entry_point&#xff09;的解决方法 报错信息&#xff1a; Failed to execute script entry_point 解决办法&#xff1a; 清理硬盘空间&#xff0c;确定区间内空间足够 Linux文件按大小排序 du -hs * | sort …

已解决:多线程环境中,新线程在使用cout函数打印输出到显示器出现数据混乱的情况

错误展示错误原因解决办法1. 在本问题情况下&#xff1a;使用printf函数替代cout&#xff1a;2. 使用互斥锁使 cout函数线程保持原子状态 什么是原子操作&#xff1f; 错误展示 最近学习多线程的时候&#xff0c;创建了一堆线程&#xff0c;然后每个线程都运行这个方法&#x…

了解Unity编辑器之组件篇Miscellaneous(九)

一、Aim Constraint&#xff1a;是一种动画约束&#xff0c;用于使一个对象朝向另一个对象或一个指定的矢量方向 Activate按钮&#xff1a;用于激活或停用Aim Constraint。当Aim Constraint处于激活状态时&#xff0c;其约束效果将应用于目标对象。 Zero按钮&#xff1a;用于将…

一款8000MHz的国产DDR5电竞内存条,光威神策系列DDR5只需900即可入手,

光威近期发布了一款能到8000MHz的DDR5内存新品&#xff0c;相比市场上现有的DDR5内存条&#xff0c;光威神策系列DDR5在性能和产品设计方面都有了较大的突破&#xff0c;是国产内存的典范型产品。这款内存DDR5以唐代“神策军”命名&#xff0c;国风色彩很明显&#xff0c;也是光…

一套不错的基于uniapp实现的投票类小程序/H5

最近作者心血来潮&#xff0c;想做一个热点话题投票&#xff0c;话题相关的资讯跟踪类的小程序&#xff0c;方便自己发布一些大家比较关心的话题。 基于以上需求&#xff0c;说干就干&#xff0c;首先需要定义一个需求&#xff1a; 1、支持热门话题投票、排行榜&#xff08;日…

注解和反射03--Class对象

注解和反射 Class类Class类的常用方法获取Class类的实例哪些类型可以有Class对象 Class类 在Object类重定义了以下的方法&#xff0c;此方法将被所有子类继承 public final Class getClass()以上的方法返回值的类型是一个Class类&#xff0c;此类是Java反射的源头&#xff0c…

【好文推荐】敏捷绩效考核如何做?

前言 一个Scrum团队有三个角色&#xff1a;产品负责人、开发团队和ScrumMaster。在Scrum里没有项目经理这个角色&#xff0c;传统项目经理的主要职责被分配到产品负责人和开发团队这两个角色中。产品负责人负责管理产品待办列表&#xff0c;开发团队自己组织和管理他们的工作。…

FreeRTOS(启动流程、编码风格、调试方法)

1、启动流程 1.1 方法一 在main函数中将硬件初始化、RTOS系统初始化&#xff0c;同时创建所有任务&#xff0c;再启动RTOS调度器。 1.2 方法二 在main函数中将硬件初始化、RTOS系统初始化&#xff0c;只创建一个启动任务&#xff0c;再启动RTOS调度器。 之后&#xff0c;在…

和我女神王冰冰一起学display: flex布局

前言 早期CSS布局依赖display属性position属性float属性。它对特殊的布局非常不方便&#xff0c;如&#xff0c;垂直居中。 于是&#xff0c;W3C在2009年提出了一种新的方案——Flex方案&#xff0c;可以简便、完整、响应式地实现各种页面布局。目前&#xff0c;它已经得到了…

Drupal YAML 反序列化代码执行漏洞(CVE-2017-6920)

事件背景 框架漏洞收集 老外的CMS框架&#xff0c;比较复杂&#xff0c;数据流向太长&#xff0c;调试需要消耗较多的时间。 漏洞说明 1. 漏洞原理&#xff1a;2017年6月21日&#xff0c;Drupal官方发布了一个编号为CVE-2017- 6920 的漏洞&#xff0c;影响为Critical。这是…

信驰达推出RTL8720DN系列2.4G和5G双频Wi-Fi+蓝牙二合一模块

近日&#xff0c;领先的无线物联网通信模块厂商深圳信驰达科技RF-star推出了基于RTL8720DN SoC的2.4 GHz和5 GHz双频Wi-Fi蓝牙二合一模块—RF-WM-20DNB1。 图 1信驰达RF-WM-20DNB1 Wi-Fi模块 RF-WM-20DNB1是一款低功耗单芯片无线蓝牙和Wi-Fi组合模块&#xff0c;支持双频(2.4 G…

关于骑行,这十个另类的励志文案,让人过目不忘。

在自行车骑行的世界里&#xff0c;有许多令人振奋和感动的励志句子。以下是一些令人过目不忘的另类励志文案&#xff0c;一定会给您的骑行生涯带来新的动力和激情&#xff1a; 1.骑行并非单纯的身体运动&#xff0c;而是需要灵魂的参与。2.自行车不会说话&#xff0c;但它会唱歌…

家庭用的无线洗地机到底好不好用?2023洗地机品牌排行榜前十名

无线洗地机在清洁使用的时候非常便捷&#xff0c;多功能于一体能够轻轻松松就拖扫完全家&#xff0c;不需要多余的先扫再拖&#xff0c;浪费时间还非常的劳累。那么有什么靠谱并且质量也有保障的无线洗地机推荐吗&#xff1f;为了给想要选购洗地机的小伙伴提供一些参考&#xf…

SpringMVC-mybatis中可以返回查询的个数,但是都为null。。。

通过postman测试请求时&#xff0c;显示查询成功&#xff0c;返回一个json数组&#xff0c;里面也有数据&#xff0c;但是数据都是null。 说明&#xff1a;确实是sql执行成功了&#xff0c;只不过是没有将sql中的字段的值给注入到对象的属性中去。。。 Select("SELECT * …

ArduPilot之433电传模块集成之H7Dual飞控Rx/Tx丝印问题

ArduPilot之433电传模块集成之H7Dual飞控Rx/Tx丝印问题 1. 源由2. 安装3. 排查3.1 电气连接3.2 软件配置3.3 模块测试3.4 通信测试3.5 定位问题 4. 总结5. 参考资料 1. 源由 鉴于最近iNav最新固件6.1.1出现远航炸机&#xff0c;还是回到相对可靠的Ardupilot&#xff0c;在Mavl…

Android 之 动画合集之属性动画 -- 又见

本节引言&#xff1a; 上节我们对Android的属性动画进行了初步的学习&#xff0c;相信大家对于属性动画已经不再是 一知半解的状态了&#xff0c;本节我们继续来探究Android属性动画的一些更高级的用法&#xff01; 1.Evaluator自定义 1&#xff09;Evaluator介绍 上一节中的…

黑马程序员-从0到1学习Linux-第三章-Linux用户和权限

目录 认知root用户 用户、用户组管理 查看权限控制 修改权限控制 - chmod 修改权限控制 - chown 认知root用户 1、root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中&#xff0c;拥有最大…

数据库—数据库备份(三十四)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、数据备份的重要性 三、造成数据丢失的原因 四、备份类型 4.1物理与逻辑角度 4.2数据库备份策略角度 五、常见的备份方法 5.1 物理备份 5.2 使用专用备…

物理机安装ESXI时遇到No Network Adapters

前不久在虚拟机下安装完成了ESXI&#xff0c;果断地使用了&#xff0c;确实很不错了&#xff0c; 配合我上次发的密匙&#xff08;https://www.cnntt.com/archives/5556&#xff09;妥妥爽。 虚拟机中试玩了一下&#xff0c;就开始布置到我的物理机上了&#xff0c;毕竟我以后…