LeetCode-剑指44-数字序列中某一位的数字

news2025/7/20 17:12:29

在这里插入图片描述

1、找规律

我们通过找规律可以发现,当位数为 x x x时,其占用的位数为 x × 9 × 1 0 x − 1 x\times9\times10^{x-1} x×9×10x1。因此我们可以不断循环并增大位数 x x x直至 n − x < x × 9 × 1 0 x − 1 n-x<x\times9\times10^{x-1} nx<x×9×10x1,此时数字落在剩余的位数中。为了方便起见,我们去除0的情况即 i n d e x = n − 1 index = n - 1 index=n1。我们首先获得当前位数对应数字的起始值,即 s t a r t = ( i n t ) p o w ( 10 , d − 1 ) start = (int) pow(10, d - 1) start=(int)pow(10,d1)。而后我们计算我们对应的数字为 n u m = s t a r t + i n d e x / d num = start + index / d num=start+index/d。我们确定我们需要的数字在当前数字中的第 i n d e x % d index \% d index%d位。最终我们获得数字为 d i g i t = ( n u m / ( i n t ) ( p o w ( 10 , d − d i g i t I n d e x − 1 ) ) ) % 10 digit = (num / (int) (pow(10, d - digitIndex - 1))) \% 10 digit=(num/(int)(pow(10,ddigitIndex1)))%10

class Solution {
public:
    int findNthDigit(int n) {
        int d = 1, count = 9;
        while (n > (long) d * count) {
            n -= d * count;
            d++;
            count *= 10;      
        }
        int index = n - 1;
        int start = (int) pow(10, d - 1);
        int num = start + index / d;
        int digitIndex = index % d;
        int digit = (num / (int) (pow(10, d - digitIndex - 1))) % 10;
        return digit;
    }
};

2、二分查找

具体思路同上,区别在于我们可以通过范围确定位数不超过9,从而使用二分查找来直接进行查询。

class Solution {
public:
    int findNthDigit(int n) {
        int low = 1, high = 9;
        while (low < high) {
            int mid = (high - low) / 2 + low;
            if (totalDigits(mid) < n) {
                low = mid + 1;
            } else {
                high = mid;
            }
        }
        int d = low;
        int prevDigits = totalDigits(d - 1);
        int index = n - prevDigits - 1;
        int start = (int) pow(10, d - 1);
        int num = start + index / d;
        int digitIndex = index % d;
        int digit = (num / (int) (pow(10, d - digitIndex - 1))) % 10;
        return digit;
    }

    int totalDigits(int length) {
        int digits = 0;
        int curLength = 1, curCount = 9;
        while (curLength <= length) {
            digits += curLength * curCount;
            curLength++;
            curCount *= 10;
        }
        return digits;
    }
};

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

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

相关文章

HTTP协议加强

HTTP协议加强[TOC](HTTP协议加强)一、HTTP协议简介1.1 什么是通信1.2 什么是通信协议1.3 HTTP二、HTTP请求2.1 什么是HTTP请求消息2.2 HTTP请求消息的组成部分三、HTTP响应3.1 什么是HTTP响应消息3.2 HTTP响应消息的组成部分四、HTTP请求方法4.1 什么是HTTP请求方法4.2 HTTP的请…

接口性能调优的方法,这有11种,你知道几种?

​当我们谈到“软件测试”时&#xff0c;是指软件测试的相关工作&#xff0c;如单元测试、集成测试、系统测试等&#xff0c;但不局限于动态测试&#xff0c;也可以包括静态测试——需求评审、设计评审、代码评审和借助工具进行代码静态分析。 接口性能调优共11种方法&#xf…

Nftea: 世界杯文化、 NFT与 期权的首度碰撞

体育文化&#xff0c;正在成为加密行业发展的新驱动力 卡塔尔世界杯即将在2022年11月20日开幕&#xff0c;随着开赛日期的临近&#xff0c;作为四年一度的足球狂欢盛会&#xff0c;也吊足了全球足球球迷们的胃口。当然&#xff0c;从上个世纪开始&#xff0c;体育文化就成为了商…

Slurm作业管理系统常用命令和教程

Slurm &#xff08; Simple Linux Utility for Resource Management &#xff09;是开源的、具有容错性和高度可扩展大型和小型 Linux集群资源管理和作业调度系统。超级计算系统可利用 Slurm 进行资源和作业管理&#xff0c;以避免相互干扰&#xff0c;提高运行效率。所有需运行…

charles

charles中文名叫青花瓷&#xff0c;是一款基于HTTP协议的代理服务器。通过电脑或浏览器的代理来截取请求和请求结果&#xff0c;达到抓包并进行数据分析的目的。charles可以截取HTTP和HTTPS的网络封包&#xff0c;支持重发网络请求、修改网络请求参数、流量控制等场景 安装 由…

LeetCode刷题(python版)——Topic65.有效数字

一、题设 有效数字&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 一个 小数 或者 整数&#xff08;可选&#xff09;一个 e 或 E &#xff0c;后面跟着一个 整数 小数&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; &#xff08;可选&…

Vue:搭建前端项目-----我给你打个样

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞&#x1f44d;&#x1f44d;&#x1f44d;收藏⭐⭐⭐】一键三连&#xff01;一起努力&#xff01; 家人们好久不见&#xff0c;这次我们继续上干货&#xff0c;我们来介绍一下如何使用vue搭建一个前端项目&#xff1b; 在这里我会…

pytest fixture 中的使用包信scope skip conftest.py 和参数化等功能使用

pytest中所谓的夹具&#xff1a; fixture scope参数详解&#xff1a; scope&#xff1a; 表示fixture共享夹具的范围&#xff0c;有以下五个范围 function 功能&#xff1a; 在函数或方法运行时执行fixture函数的功能 默认作用域 class 功能&#xff1a;在类运行时调用一次。…

Mindspore网络构建

网络构建 神经网络模型是由神经网络层和Tensor操作构成的&#xff0c;mindspore.nn提供了常见神经网络层的实现&#xff0c;在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff0c;也是网络的基本单元。一个神经网络模型表示为一个Cell&#xff0c;它由不同的子Cell…

【python】常见的正则表达式用法;匹配字符串

本文仅仅展现了python正则表达式中的一小部分内容&#xff0c;但是包含了实际应用中非常被频繁使用的例子&#xff0c;本文重在举例&#xff0c;即不需要相关语法知识就能够会用~ 目录re.match()re.findall()匹配两个字符串之间的字符串并返回匹配某字符串之前/之后的所有字符串…

matlab使用NCL提供的colormap

一、自带的colormap matlab默认提供了几个基础的colormap&#xff0c;比如常见的jet和parula matlab里调用colormap的命令是 colormap(jet) jet到底代表什么呢。 可以看到其表示n*3的矩阵&#xff0c;数字介于0-1之间&#xff0c;分别代表红绿蓝。 二、m_map的colormap m_…

数据库系统概论第六章(关系数据理论)知识点总结(2)—— 码的概念总结

本专栏收录了数据库的知识点&#xff0c;而从本文起&#xff0c;将讲述有关于关系数据理论中的第一范式、第二范式、第三范式以及BC范式有关知识点&#xff0c;提供给有需要的小伙伴进行学习&#xff0c;本专栏地址可以戳下面链接查看 &#x1f388; 数据库知识点总结&#xff…

今年的数据安全风险点是什么?看数据

2022年已接近尾声&#xff0c;降低数据安全风险&#xff0c;加强防御能力依然是政企发展中的重点和目标。 2022年全球网络安全、数据安全事件频发&#xff0c;钓鱼、勒索、欺诈等复合攻击层出不穷&#xff0c;这里对2022年部分时间段的数据进行统计&#xff0c;并且这一趋势很…

基于微信小程序的高校餐厅食品留样管理系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Mav…

图形学-几何-曲线与曲面

1.什么是曲线 我们使用一系列的点去定义一条曲线。这些控制点描述了曲线的一些性质。最常见的曲线叫做贝塞尔曲线&#xff08;Bzier Curve&#xff09;。 1.1 贝塞尔的画法 在三个点的情况下。在二维情况下&#xff0c;使用三个控制点画出的贝塞尔曲线称为二次贝塞尔曲线&am…

第三节.常用Linux命令—文件和目录

第三节.常用Linux命令—文件和目录 1.查看目录内容:ls 1).功能: 列出目录的内容 2).常用选项: 参数含义-a显示指定目录下所有子目录和文件&#xff0c;包含隐藏文件(以 开头的文件)-l以列表形式显示文件的详细信息-h配合 -l 以人性化的方式显示文件大小 3).计算机中文件大小…

【数据结构初阶】(栈和队列)图文详解四道oj+三道easy概念题

你也会感到孤独吗&#xff1f; 文章目录一、队列和栈的接口二、有效的括号2.1 思路呈现2.2 代码呈现细节讲解三、用队列实现栈3.1 思路呈现3.2 代码呈现细节讲解3.3 总结四、用栈实现队列4.1 思路呈现4.2 代码呈现细节讲解4.3 总结五、设计循环队列5.1 思路呈现5.2 数组5.3 链表…

海思3559AV100 gdb+gdbserver调试·基础篇

问题描述 随着程序越来越复杂&#xff0c;单靠输出信息调试程序已然是不合适的&#xff0c;所以必须考虑使用gdb调试&#xff0c;由于板子上比较难加载代码&#xff0c;所以最合适的办法应该是gdbgdbserver远程调试&#xff0c;这样我们可以清楚地看到程序的运行信息。gdb官方…

第三章 组合逻辑电路

思维导图 笔记 组合逻辑电路 电路在任意时刻的输出状态仅由该时刻的输入信号决定&#xff0c;与电路在此信号输入之前的状态无关。 组合逻辑电路的分析 分析步骤 ①根据逻辑电路图&#xff0c;写出输出逻辑函数的表达式 ②根据逻辑表达式&#xff0c;列出真值表 ③由真值表或…

前端动画的另一种方式 json动画

前言 一谈到前端动画&#xff0c;最先想到的就是css3&#xff0c;当然这是其中一种方式&#xff0c;甚至有许多动画库&#xff0c;aniamte.css就是其中的一种。 我之前也谈到过三种做前端动画的方式 https://blog.csdn.net/glorydx/article/details/116102127 但现在&#x…