找出第 N 个数对应的数字

博客探讨了如何高效地找到数字序列0123456789101112...中的第n位对应的数字。通过分析序列规律,确定数字所在的范围,并通过除法和取余计算出具体位置。
摘要由CSDN通过智能技术生成

题目:数字以 012345678910111213141516171819…的格式序列化到一个字符序列中。在这个序列中第 1 位 是 0 ,第五位是 4 , 第 11 位是 1 ,我们现在要求第 n 位对应的数字。
思路:
最简单的方法是从 0 开始,累加数字,最终刚好得到第 n 位数字,或者刚好比 n 多的数字,再求对应数字。但是这样时间复杂度较高,也没有合理的利用数字规律,显然不是最佳的方法。
接下来我们考虑数字顾虑,明显 前 10 个数是 0123456789 ,这 10 数都是 个位有数字,而 10~99 这 90 个数每个数有两位数: 十位和个位,一共有 90*2 = 180 个数,100~999 这 900 个数每个数有三位数: 百、十、个 位 ,一共有 2700个数,1000~9999 这9000个数每个数有四位,一共 36000 个数……以此类推,我们可以找出 第 n 个数落在那部分中。
用一个具体的例子来说明:比如我们现在找第 3500 个数对应的哪个数,因为 3500 > 10 ,所以不在 0~9 中,3500 > (180 + 10 ),所以不在 10~99中,3500 > (2700 + 180 + 10 ),所以不在 100~999 中,3500 < (36000 + 2700 + 180 + 10 ),所以 第 3500 个数落在 1000~9999 中。我们现在已经找出第 n 个数在哪段数中,接着就是找出对应的那个数字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值