File tree 4 files changed +130
-1
lines changed
4 files changed +130
-1
lines changed Original file line number Diff line number Diff line change 43
43
<!-- 这里可写通用的实现逻辑 -->
44
44
- 创建大根堆、小根堆,其中:大根堆存放较小的一半元素,小根堆存放较大的一半元素。
45
45
- 添加元素时,若两堆元素个数相等,放入小根堆(使得小根堆个数多1);若不等,放入大根堆(使得大小根堆元素个数相等)
46
- - 取中位数时,若两队元素个数相等 ,取两堆顶求平均值;若不等,取小根堆堆顶。
46
+ - 取中位数时,若两堆元素个数相等 ,取两堆顶求平均值;若不等,取小根堆堆顶。
47
47
48
48
### Python3
49
49
<!-- 这里可写当前语言的特殊实现逻辑 -->
Original file line number Diff line number Diff line change
1
+ # [ 面试题44. 数字序列中某一位的数字] ( https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/ )
2
+
3
+ ## 题目描述
4
+ <!-- 这里写题目描述 -->
5
+ 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
6
+
7
+ 请写一个函数,求任意第n位对应的数字。
8
+
9
+ ** 示例 1:**
10
+
11
+ ```
12
+ 输入:n = 3
13
+ 输出:3
14
+ ```
15
+
16
+ ** 示例 2:**
17
+
18
+ ```
19
+ 输入:n = 11
20
+ 输出:0
21
+ ```
22
+
23
+ ** 限制:**
24
+
25
+ - ` 0 <= n < 2^31 `
26
+
27
+ 注意:本题与主站 400 题相同:https://leetcode-cn.com/problems/nth-digit/
28
+
29
+ ## 解法
30
+ <!-- 这里可写通用的实现逻辑 -->
31
+ - pow = 0:0~ 9 有 10 位
32
+ - pow = 1: 10~ 99 有 ` 90*2=180 ` 位
33
+ - pow = 2: 100~ 999 有 ` 900*3=2700 ` 位。
34
+
35
+ 先求出第 n 位所在的 pow 和真实数字,进而求出真实数字的第 ` n % (pow + 1) ` 位即可。
36
+
37
+ ### Python3
38
+ <!-- 这里可写当前语言的特殊实现逻辑 -->
39
+
40
+ ``` python
41
+ class Solution :
42
+ def findNthDigit (self , n : int ) -> int :
43
+ def get_bit_num ():
44
+ return 10 if p == 0 else 9 * pow (10 , p) * (p + 1 )
45
+
46
+ if n < 10 :
47
+ return n
48
+ p = count = 0
49
+ while 1 :
50
+ count = get_bit_num()
51
+ if n < count: break
52
+ n -= count
53
+ p += 1
54
+ num = n // (p + 1 ) + pow (10 , p)
55
+ return int (str (num)[n % (p + 1 )])
56
+
57
+
58
+
59
+ ```
60
+
61
+ ### Java
62
+ <!-- 这里可写当前语言的特殊实现逻辑 -->
63
+
64
+ ``` java
65
+ class Solution {
66
+ public int findNthDigit (int n ) {
67
+ if (n < 10 ) return n;
68
+ int pow = 0 , count;
69
+ while (true ) {
70
+ count = getBitNum(pow);
71
+ if (n < count) break ;
72
+ n -= count;
73
+ ++ pow;
74
+ }
75
+ int num = n / (pow + 1 ) + (int ) Math . pow(10 , pow);
76
+ return String . valueOf(num). charAt(n % (pow + 1 )) - ' 0' ;
77
+ }
78
+
79
+ private int getBitNum (int pow ) {
80
+ if (pow == 0 ) {
81
+ return 10 ;
82
+ }
83
+ return (int ) (9 * Math . pow(10 , pow) * (pow + 1 ));
84
+ }
85
+ }
86
+ ```
87
+
88
+ ### ...
89
+ ```
90
+
91
+ ```
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int findNthDigit (int n ) {
3
+ if (n < 10 ) return n ;
4
+ int pow = 0 , count ;
5
+ while (true ) {
6
+ count = getBitNum (pow );
7
+ if (n < count ) break ;
8
+ n -= count ;
9
+ ++pow ;
10
+ }
11
+ int num = n / (pow + 1 ) + (int ) Math .pow (10 , pow );
12
+ return String .valueOf (num ).charAt (n % (pow + 1 )) - '0' ;
13
+ }
14
+
15
+ private int getBitNum (int pow ) {
16
+ if (pow == 0 ) {
17
+ return 10 ;
18
+ }
19
+ return (int ) (9 * Math .pow (10 , pow ) * (pow + 1 ));
20
+ }
21
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def findNthDigit (self , n : int ) -> int :
3
+ def get_bit_num ():
4
+ return 10 if p == 0 else 9 * pow (10 , p ) * (p + 1 )
5
+
6
+ if n < 10 :
7
+ return n
8
+ p = count = 0
9
+ while 1 :
10
+ count = get_bit_num ()
11
+ if n < count : break
12
+ n -= count
13
+ p += 1
14
+ num = n // (p + 1 ) + pow (10 , p )
15
+ return int (str (num )[n % (p + 1 )])
16
+
17
+
You can’t perform that action at this time.
0 commit comments