【剑指OFFER】44. 数字序列中某一位的数字
发布日期:2021-06-29 19:46:46 浏览次数:2 分类:技术文章

本文共 950 字,大约阅读时间需要 3 分钟。

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

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

示例 1:

输入:n = 3
输出:3

示例 2:

输入:n = 11
输出:0

限制:

0 <= n < 2^31

答案:

/* 数字范围    数量  位数    占多少位    1-9        9      1       9    10-99      90     2       180    100-999    900    3       2700    1000-9999  9000   4       36000  ...    例如 n= 2901 = 9 + 180 + 2700 + 12 即一定是4位数中的第12位   n1 = 12;    该位置数据为 = 1000 + (12 - 1)/ 4  = 1000 + 2 = 1002    定位1002中的位置 = (12 - 1) %  4 = 3    s.charAt(3) = 2;*/class Solution {
public int findNthDigit(int n) {
long start = 1; //起始数字 int bitNum = 1; //位数 long bitTake = 9; //占多少位 while(n > bitTake){
n -= bitTake; start *= 10; bitNum++; bitTake = 9 * start * bitNum; } long num = start + (n - 1) / bitNum; int place = (n - 1) % bitNum; return Long.toString(num).charAt(place)-'0'; }}

转载地址:https://darkness.blog.csdn.net/article/details/115253561 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【剑指OFFER】45. 把数组排成最小的数
下一篇:【剑指OFFER】 43. 1~n 整数中 1 出现的次数

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月13日 15时13分46秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章