大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章将为大家详细讲解有关LeetCode如何找出数字序列中某一位的数字,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
沙依巴克网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
数字以 0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第 5 位(从下标 0 开始计数)是 5,第 13 位是 1,第 19 位是 4,等等。
请写一个函数,求任意第 n 位对应的数字。
输入:n = 3
输出:3
输入:n = 11
输出:0
pow(10, le-1)
9*start
9*start*le
(因为每个数字有 le 个字符)[cnt, nextcnt)
范围内, 那就说明 n 落在的数字一定有 le 位start+(n-cnt)/le
, 而具体 n 是在该数字的第几位, 则是
(n-cnt)%le
O(logN)
O(1)
class Solution:
def findNthDigit(self, n: int) -> int:
if n == 0:
return 0
# 初始化计数值为1, 因为start最开始是1, 此时已经有1个字符了
cnt = 1
# 初始化位数为1位
le = 1
while n >= cnt:
# 求当前位数下的start
start = 10**(le - 1)
# 求当前位数+1情况下的字符总数
nexcnt = cnt + 9 * start * le
if n <= nexcnt:
# 当前n落在范围内, 找对应的数字和该数字中n对应的位(偏移量)
i, offset = divmod(n - cnt, le)
num = start + i
# 将数字转成字符串, 其偏移量下标对应的位即为所求
return int(str(num)[offset])
# 更新字符总数, 同时位数加1, 继续循环
cnt = nexcnt
le += 1
关于“LeetCode如何找出数字序列中某一位的数字”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。