File tree Expand file tree Collapse file tree 1 file changed +72
-1
lines changed Expand file tree Collapse file tree 1 file changed +72
-1
lines changed Original file line number Diff line number Diff line change 45
45
46
46
具体做法是,首先计算出 $n$ 对应的是当前位数的哪一个数字,然后计算出是该数字的第几位,从而得到该位上的数字。
47
47
48
- 时间复杂度 $O(\log_ {10} n)$。
48
+ 时间复杂度 $O(\log_ {10} n)$,空间复杂度 $O(1)$。其中 $n$ 为给定的数字 。
49
49
50
50
<!-- tabs:start -->
51
51
@@ -66,6 +66,21 @@ class Solution:
66
66
return int (str (num)[idx])
67
67
```
68
68
69
+ ``` python
70
+ class Solution :
71
+ def findNthDigit (self , n : int ) -> int :
72
+ if n < 10 :
73
+ return n
74
+ n -= 10
75
+ k, p = 2 , 10
76
+ while n >= 9 * k * p:
77
+ n -= 9 * k * p
78
+ k += 1
79
+ p *= 10
80
+ x = p + n // k
81
+ return int (str (x)[n % k])
82
+ ```
83
+
69
84
### ** Java**
70
85
71
86
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -86,6 +101,25 @@ class Solution {
86
101
}
87
102
```
88
103
104
+ ``` java
105
+ class Solution {
106
+ public int findNthDigit (int n ) {
107
+ if (n < 10 ) {
108
+ return n;
109
+ }
110
+ n -= 10 ;
111
+ int k = 2 , p = 10 ;
112
+ while (n >= (long ) 9 * k * p) {
113
+ n -= 9 * k * p;
114
+ ++ k;
115
+ p *= 10 ;
116
+ }
117
+ int x = p + n / k;
118
+ return String . valueOf(x). charAt(n % k) - ' 0' ;
119
+ }
120
+ }
121
+ ```
122
+
89
123
### ** C++**
90
124
91
125
``` cpp
@@ -105,6 +139,26 @@ public:
105
139
};
106
140
```
107
141
142
+ ```cpp
143
+ class Solution {
144
+ public:
145
+ int findNthDigit(int n) {
146
+ if (n < 10) {
147
+ return n;
148
+ }
149
+ n -= 10;
150
+ int k = 2, p = 10;
151
+ while (n >= 9ll * k * p) {
152
+ n -= 9 * k * p;
153
+ ++k;
154
+ p *= 10;
155
+ }
156
+ int x = p + n / k;
157
+ return to_string(x)[n % k] - '0';
158
+ }
159
+ };
160
+ ```
161
+
108
162
### ** Go**
109
163
110
164
``` go
@@ -121,6 +175,23 @@ func findNthDigit(n int) int {
121
175
}
122
176
```
123
177
178
+ ``` go
179
+ func findNthDigit (n int ) int {
180
+ if n < 10 {
181
+ return n
182
+ }
183
+ n -= 10
184
+ k , p := 2 , 10
185
+ for n >= 9 *k*p {
186
+ n -= 9 * k * p
187
+ k++
188
+ p *= 10
189
+ }
190
+ x := p + n/k
191
+ return int (strconv.Itoa (x)[n%k] - ' 0' )
192
+ }
193
+ ```
194
+
124
195
### ** JavaScript**
125
196
126
197
``` js
You can’t perform that action at this time.
0 commit comments