数字序列中某一位的数字(剑指offer44 力扣400)Java迭代

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

一、题目描述



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


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


示例 1:

输入:n = 3

输出:3


示例 2:

输入:n = 11

输出:0

 

限制:

0 <= n < 2^31


二、思路讲解


       

找规律的题目,就看脑筋能不能急转弯了。可以知道,一位数一共有9个,二位数一共有99个,三位数一共用999个……那么我们就可以根据给定数字找到他落在哪个数字上,进而判定他落在该数字的哪一位上。


三、Java代码实现



class Solution {
    public int findNthDigit(int n) {
        int digit = 1;  //数字的位数
        long start = 1; //每位数的开始数字,即1、10、100……
        long count = 9; //每位数的个数,即9、99、999
        while (n > count) { 
            n -= count;     //用-=可以做隐式类型转换
            digit = digit + 1;     //位数加一位
            start = start * 10;    //开始的数字加个零
            count = digit * start * 9;  //这个位数的数字个数
        }
        long num = start + (n - 1) / digit; //判断n落在哪一个数字上
        return Long.toString(num).charAt((n - 1) % digit) - '0'; //判断落在这个数字的哪一位上
    }
}



四、时空复杂度分析



时间复杂度:        O(logN)


空间复杂度:        O(logN)



相关文章
|
6月前
|
存储 C++ 索引
最长连续序列(每天刷力扣hot100系列)
本题使用哈希表法求最长连续序列。利用unordered_set存储去重元素,遍历集合时仅当num-1不存在时才作为起点向后扩展,统计连续长度,时间复杂度O(n),空间复杂度O(n)。相比unordered_map更高效,因无需存储值。
|
10月前
|
Go
【LeetCode 热题100】DP 实战进阶:最长递增子序列、乘积最大子数组、分割等和子集(力扣300 / 152/ 416 )(Go语言版)
本文深入解析三道经典的动态规划问题:**最长递增子序列(LIS)**、**乘积最大子数组** 和 **分割等和子集**。 - **300. LIS** 通过 `dp[i]` 表示以第 `i` 个元素结尾的最长递增子序列长度,支持 O(n²) 动态规划与 O(n log n) 的二分优化。 - **152. 乘积最大子数组** 利用正负数特性,同时维护最大值与最小值的状态转移方程。 - **416. 分割等和子集** 转化为 0-1 背包问题,通过布尔型 DP 实现子集和判断。 总结对比了三题的状态定义与解法技巧,并延伸至相关变种问题,助你掌握动态规划的核心思想与灵活应用!
407 1
|
存储 Java 数据处理
如何使用 Java 迭代 HashMap 中的 ArrayList
【8月更文挑战第23天】
231 2
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
228 6
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
260 2
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
236 1
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
268 1
|
算法 Java
LeetCode(一)Java
LeetCode(一)Java
203 0
|
存储 Java 数据处理
|
Java API 微服务
Java微服务架构应对互联网应用的大规模访问与快速迭代挑战
Java微服务架构应对互联网应用的大规模访问与快速迭代挑战,通过将应用分解为小型、自治的服务,增强系统灵活性与可扩展性。本文概览微服务定义及特点,深入剖析服务拆分、注册发现、API网关等核心原理,并介绍Spring Boot、Spring Cloud、Docker与Kubernetes等关键技术实践,助力高效构建稳定、高性能的企业级应用。
219 0
下一篇
开通oss服务