【剑指offer】数字序列中某一位的数字(python)

题目描述

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。

解题思路
采用for循环从1到n不断累加数字的长度length,当累加的长度大于n时,说明当前的数字即为需要寻找的数字:

    for i in range(n):
        length += len(str(i))
       		 if length >= n:

通过length-n即可求出第n位为当前数字的第几位:

str(i)[length - n]

完整代码

def print_num(n):
    length = 0
    for i in range(n):
        length += len(str(i))
        if length >= n:
            return str(i)[length - n]

print(print_num(3))

PS:说一些题外话,本题的解题思路借鉴了别人的,之所以一定要写在这儿,是因为博主本人对这个题一直耿耿于怀,我在面试字节跳动的时候,HR给我出了这个题,当时思考了很久一直没有解题思路,因此也就尝到了凉面。

全部评论
兄弟你的代码有bug,你第10位输出的就错了,测试数据要搞大一点哈,给你改了 def print_num(n): length = 0 i = 1 while length < n: length += len(str(i)) if length >= n: return int(str(i)[n - length - 1]) i += 1
点赞 回复 分享
发布于 2021-09-26 18:43
而且这个方法在leetcode上会超时,你可以看看k神的题解,不过k神的解法也不是最优,最优的算法我还没看明白,因为只有大佬留下的代码
点赞 回复 分享
发布于 2021-09-26 18:46

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务