400. 第 N 位数字【我亦无他唯手熟尔】

简介: 400. 第 N 位数字【我亦无他唯手熟尔】

400. 第 N 位数字

难度 中等

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。
示例 1:

输入:n = 3

输出:3

示例 2

输入:n = 11

输出:0

解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是 0 ,它是 10 的一部分。

提示

  • 1 <= n <= 231 - 1
  • n 位上的数字是按计数单位(digit)从前往后数的第 n 个数,参见 示例 2

题解

思路:
先定位到哪个数i
i为w位数
n每次-w
i每次+1
退出循环的条件是n<=0
因为最后一次n-=w是负数
i多加了1
所以循环外i=i-1
n是负数对应的含义为
0是最后一位
-1是倒数第二位
依次
最后求出结果d
class Solution {
   public int findNthDigit(int n) {
        int i=1;
        int w=1;
        while(n>0){
            if(i<Math.pow(10,w)){
                n-=w;
            }
            i++;
            if(i==Math.pow(10,w)){
                w++;
            }
        }
        i=i-1;
        int d=i%10;
        for(;n<=0;n++){
            d=i%10;
            i/=10;
        }
        return d;
    }
}



官方

方法二:直接计算
已知 x 位数共有9×10x−1个,所有 x 位数的位数之和是9×10 x−1。使用 d 和 count 分别表示当前遍历到的位数和当前位数下的所有整数的位数之和,初始时 d=1,count=9。每次将 n 减去 d d×count,然后将 d 加 1,将 count 乘以 10,直到 n≤d×count,此时的 d 是目标数字所在整数的位数,n 是所有 d 位数中从第一位到目标数字的位数。


为了方便计算目标数字,使用目标数字在所有 d 位数中的下标进行计算,下标从 0 开始计数。令

index=n−1,则 index 即为目标数字在所有 d 位数中的下标,index 的最小可能取值是 0。


得到下标index 之后,即可使用方法一的做法得到无限整数序列中的第 n 位数字。

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) Math.pow(10, d - 1);
        int num = start + index / d;
        int digitIndex = index % d;
        int digit = (num / (int)(Math.pow(10, d - digitIndex - 1))) % 10;
        return digit;
    }
}

作者:LeetCode-Solution

链接:https://leetcode-cn.com/problems/nth-digit/solution/di-n-wei-shu-zi-by-leetcode-solution-mdl2/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


相关文章
|
8月前
|
消息中间件 数据库 开发者
《微服务必解之惑:分布式事务方案大揭秘》
微服务架构因灵活性与可扩展性成为企业首选,但分布式事务问题随之凸显。本文探讨了多种解决方案:两阶段提交(2PC)和三阶段提交(3PC)保证强一致性,但存在性能瓶颈;基于消息队列的最终一致性方案通过异步通信提升性能,适合对实时性要求不高的场景;Saga模式和TCC模式分别通过补偿事务和三阶段控制实现灵活处理。选择方案需综合考虑业务需求、系统架构及开发成本,以找到最优解。掌握这些方法,可有效应对微服务中的分布式事务挑战,构建高效稳定的系统。
242 0
|
7月前
|
数据采集 人工智能 边缘计算
爬虫IP代理效率优化:策略解析与实战案例
本文深入探讨了分布式爬虫中代理池效率优化的关键问题。首先分析了代理效率瓶颈的根源,包括不同类型代理的特点、连接耗时及IP失效问题。接着提出了六大核心优化策略:智能IP轮换矩阵、连接复用优化、动态指纹伪装、智能重试机制等,并结合电商价格监控、社交媒体舆情分析和金融数据抓取三个实战案例,展示了优化效果。同时建立了三维效率评估体系,从质量、成本和稳定性全面衡量性能。最后展望了AI驱动调度、边缘计算融合等未来演进方向,帮助爬虫系统实现从“暴力采集”到“智能获取”的进化,大幅提升效率并降低成本。
286 0
|
运维 Kubernetes 监控
PaaS平台
【7月更文挑战第2天】PaaS平台
553 58
|
人工智能 搜索推荐 大数据
探索移动应用开发的未来之路
在数字化时代的浪潮中,移动应用已成为我们日常生活不可或缺的一部分。本文将深入探讨移动应用开发的新趋势、挑战及未来展望,为开发者和科技爱好者提供行业洞见。
119 28
|
存储 机器学习/深度学习 算法框架/工具
张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix)
张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix)
329 1
|
Ubuntu PyTorch 算法框架/工具
Python程序运行,“libgcc_s.so.1 must be installed for pthread_cancel to work”解决办法
Python程序运行,“libgcc_s.so.1 must be installed for pthread_cancel to work”解决办法
509 0
|
传感器 资源调度 Shell
遥感物理基础(2)物体的发射与反射辐射特征
本文内容主要介绍地物的发射和反射辐射特征,通过名词解释与案例,认识地物特征与遥感影像成像的联系,结合实践理解晦涩难懂的原理
1231 0
《QT从基础到进阶·二十五》界面假死处理
《QT从基础到进阶·二十五》界面假死处理
421 0
《QT从基础到进阶·二十五》界面假死处理
|
测试技术
Playwright 系列(14):如何写对话框的用例
Playwright 系列(14):如何写对话框的用例
276 0
|
机器学习/深度学习 移动开发 自然语言处理
深度学习进阶篇-预训练模型1:预训练分词Subword、ELMo、Transformer模型原理;结构;技巧以及应用详解
深度学习进阶篇-预训练模型1:预训练分词Subword、ELMo、Transformer模型原理;结构;技巧以及应用详解
深度学习进阶篇-预训练模型1:预训练分词Subword、ELMo、Transformer模型原理;结构;技巧以及应用详解

热门文章

最新文章