Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1331dbb

Browse files
committed
feat: add solutions to lc problem: No.0400.Nth Digit
1 parent 06875ce commit 1331dbb

File tree

4 files changed

+114
-28
lines changed

4 files changed

+114
-28
lines changed

‎solution/0400-0499/0400.Nth Digit/README.md‎

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
<strong>解释:</strong>第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 <strong>0 </strong>,它是 10 的一部分。
3030
</pre>
3131

32-
3332
## 解法
3433

3534
<!-- 这里可写通用的实现逻辑 -->
@@ -41,15 +40,60 @@
4140
<!-- 这里可写当前语言的特殊实现逻辑 -->
4241

4342
```python
44-
43+
class Solution:
44+
def findNthDigit(self, n: int) -> int:
45+
bits, t = 1, 9
46+
while n > bits * t:
47+
n -= bits * t
48+
bits += 1
49+
t *= 10
50+
51+
start = 10 ** (bits - 1) + (n // bits) - 1
52+
if n % bits == 0:
53+
return start % 10
54+
return int(str((start + 1))[(n % bits) - 1])
4555
```
4656

4757
### **Java**
4858

4959
<!-- 这里可写当前语言的特殊实现逻辑 -->
5060

5161
```java
62+
class Solution {
63+
public int findNthDigit(int n) {
64+
int bits = 1, t = 9;
65+
while (n / bits > t) {
66+
n -= bits * t;
67+
++bits;
68+
t *= 10;
69+
}
70+
int start = (int) Math.pow(10, bits - 1) + (n / bits) - 1;
71+
if (n % bits == 0) {
72+
return start % 10;
73+
}
74+
return String.valueOf(start + 1).charAt((n % bits) - 1) - '0';
75+
}
76+
}
77+
```
5278

79+
### **C++**
80+
81+
```cpp
82+
class Solution {
83+
public:
84+
int findNthDigit(int n) {
85+
int bits = 1, t = 9;
86+
while (n / bits > t)
87+
{
88+
n -= bits * t;
89+
++bits;
90+
t *= 10;
91+
}
92+
int start = pow(10, bits - 1) + (n / bits) - 1;
93+
if (n % bits == 0) return start % 10;
94+
return to_string(start + 1)[(n % bits) - 1] - '0';
95+
}
96+
};
5397
```
5498
5599
### **...**

‎solution/0400-0499/0400.Nth Digit/README_EN.md‎

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,65 @@
2929
<li><code>1 &lt;= n &lt;= 2<sup>31</sup> - 1</code></li>
3030
</ul>
3131

32-
3332
## Solutions
3433

3534
<!-- tabs:start -->
3635

3736
### **Python3**
3837

3938
```python
40-
39+
class Solution:
40+
def findNthDigit(self, n: int) -> int:
41+
bits, t = 1, 9
42+
while n > bits * t:
43+
n -= bits * t
44+
bits += 1
45+
t *= 10
46+
47+
start = 10 ** (bits - 1) + (n // bits) - 1
48+
if n % bits == 0:
49+
return start % 10
50+
return int(str((start + 1))[(n % bits) - 1])
4151
```
4252

4353
### **Java**
4454

4555
```java
56+
class Solution {
57+
public int findNthDigit(int n) {
58+
int bits = 1, t = 9;
59+
while (n / bits > t) {
60+
n -= bits * t;
61+
++bits;
62+
t *= 10;
63+
}
64+
int start = (int) Math.pow(10, bits - 1) + (n / bits) - 1;
65+
if (n % bits == 0) {
66+
return start % 10;
67+
}
68+
return String.valueOf(start + 1).charAt((n % bits) - 1) - '0';
69+
}
70+
}
71+
```
4672

73+
### **C++**
74+
75+
```cpp
76+
class Solution {
77+
public:
78+
int findNthDigit(int n) {
79+
int bits = 1, t = 9;
80+
while (n / bits > t)
81+
{
82+
n -= bits * t;
83+
++bits;
84+
t *= 10;
85+
}
86+
int start = pow(10, bits - 1) + (n / bits) - 1;
87+
if (n % bits == 0) return start % 10;
88+
return to_string(start + 1)[(n % bits) - 1] - '0';
89+
}
90+
};
4791
```
4892
4993
### **...**
Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,15 @@
11
class Solution {
2-
/***
3-
* 12345678910111213
4-
* 规律个位数9个数一共有9*1,两位数90个数 一共有90*2个数字,三位数有900个数一共有900*3个数字,以此类推
5-
* 举例15,15-9=6,6/2=3...0,余数是0,那么这个数值value=10*(2-1)+(3-1)=12,整除取最后一位 12%10=2
6-
* 举例14,14-9=5,5/2=2...1,余数不为0,那么这个数值value=10*(2-1)+2=12,则为这个数的第余数个 12/(10*(2-1))%10=1
7-
*/
82
public int findNthDigit(int n) {
9-
long max = 9;
10-
long num = n;
11-
long digits = 1;
12-
while (n > 0) {
13-
if (num - max * digits > 0) {
14-
num = num - max * digits;
15-
digits++;
16-
max = max * 10;
17-
} else {
18-
long count = num / digits;
19-
long childDigits = num % digits;
20-
if (childDigits == 0) {
21-
return (int) (((long) Math.pow(10, digits - 1) + count - 1) % 10);
22-
} else {
23-
return (int) (((long) Math.pow(10, digits - 1) + count) / ((long) Math.pow(10, (digits - childDigits))) % 10);
24-
}
25-
}
3+
int bits = 1, t = 9;
4+
while (n / bits > t) {
5+
n -= bits * t;
6+
++bits;
7+
t *= 10;
268
}
27-
return 0;
9+
int start = (int) Math.pow(10, bits - 1) + (n / bits) - 1;
10+
if (n % bits == 0) {
11+
return start % 10;
12+
}
13+
return String.valueOf(start + 1).charAt((n % bits) - 1) - '0';
2814
}
2915
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def findNthDigit(self, n: int) -> int:
3+
bits, t = 1, 9
4+
while n > bits * t:
5+
n -= bits * t
6+
bits += 1
7+
t *= 10
8+
9+
start = 10 ** (bits - 1) + (n // bits) - 1
10+
if n % bits == 0:
11+
return start % 10
12+
return int(str((start + 1))[(n % bits) - 1])

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /