博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 400. Nth digits
阅读量:4601 次
发布时间:2019-06-09

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

解法一: 一个几乎纯数学的解法

numbers:   1,...,9, 10, ..., 99, 100, ... 999, 1000 ,..., 9999, ...

# of digits:   9     +  90*2   +  900*3 + 9000*4 + ...

利用这个公式可以很容易的求出来Nth digit出现在一个几位数上。假设出现在一个4位数上。那么我们应该从1000的第一个1开始往后数 n - (9 + 90*2 + 900*3)个digits。那么第n个digits应该出现在那个4位数上呢?可以用L17算出来这个数是1000后面的第几个自然数, e.g. 5。res为最后剩余的digits的个数,这个res<=4。那么我们应该找 '1005' 中的第res-1个digit。

1 class Solution(object): 2     def findNthDigit(self, n): 3         """ 4         :type n: int 5         :rtype: int 6         """ 7         sum = 0 8         i = 1 9         while n > sum + i*9*10**(i-1):10             sum += i*9*10**(i-1)11             i += 112         start = 10**(i-1) 13         step = (n - sum - 1)//i14         res = n - sum - step*i15         return int(str(start + step)[res-1])

 

转载于:https://www.cnblogs.com/lettuan/p/6219633.html

你可能感兴趣的文章
集合以及特殊集合
查看>>
USACO 2.2 Runaround Numbers
查看>>
Matlab画图-非常具体,非常全面
查看>>
365. Water and Jug Problem
查看>>
SQL数据库数据检索top和distinct
查看>>
平衡搜索树--红黑树 RBTree
查看>>
sqlite驱动下载
查看>>
让IE6/IE7/IE8浏览器支持CSS3属性
查看>>
队列实现霍夫曼树
查看>>
【Java】图片高质量缩放类
查看>>
Python :类中设置默认属性并修改
查看>>
磁盘管理综合测试
查看>>
Unity3d Shader开发(三)Pass(Pass Tags,Name,BindChannels )
查看>>
UMLet
查看>>
从父控件移除控件
查看>>
calc()制作自适应布局
查看>>
Markdown-写作必备
查看>>
关于在Java中 a!=a 值为真的解释(摘抄)
查看>>
C#串口小助手
查看>>
详解定位与定位应用
查看>>