Skip to content

Commit 20ab087

Browse files
committed
feat: add solutions to lc problem: No.0440
No.0440.K-th Smallest in Lexicographical Order
1 parent 72b5726 commit 20ab087

File tree

10 files changed

+9353
-8966
lines changed

10 files changed

+9353
-8966
lines changed

solution/0400-0499/0440.K-th Smallest in Lexicographical Order/README.md

Lines changed: 130 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,144 @@
4444
<!-- 这里可写当前语言的特殊实现逻辑 -->
4545

4646
```python
47-
47+
class Solution:
48+
def findKthNumber(self, n: int, k: int) -> int:
49+
def count(curr):
50+
next, cnt = curr + 1, 0
51+
while curr <= n:
52+
cnt += min(n - curr + 1, next - curr)
53+
next, curr = next * 10, curr * 10
54+
return cnt
55+
56+
curr = 1
57+
k -= 1
58+
while k:
59+
cnt = count(curr)
60+
if k >= cnt:
61+
k -= cnt
62+
curr += 1
63+
else:
64+
k -= 1
65+
curr *= 10
66+
return curr
4867
```
4968

5069
### **Java**
5170

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

5473
```java
74+
class Solution {
75+
private int n;
76+
77+
public int findKthNumber(int n, int k) {
78+
this.n = n;
79+
long curr = 1;
80+
--k;
81+
while (k > 0) {
82+
int cnt = count(curr);
83+
if (k >= cnt) {
84+
k -= cnt;
85+
++curr;
86+
} else {
87+
--k;
88+
curr *= 10;
89+
}
90+
}
91+
return (int) curr;
92+
}
93+
94+
95+
public int count(long curr) {
96+
long next = curr + 1;
97+
long cnt = 0;
98+
while (curr <= n) {
99+
cnt += Math.min(n - curr + 1, next - curr);
100+
next *= 10;
101+
curr *= 10;
102+
}
103+
return (int) cnt;
104+
}
105+
}
106+
```
107+
108+
### **C++**
109+
110+
```cpp
111+
class Solution {
112+
public:
113+
int n;
114+
115+
int findKthNumber(int n, int k) {
116+
this->n = n;
117+
--k;
118+
long long curr = 1;
119+
while (k)
120+
{
121+
int cnt = count(curr);
122+
if (k >= cnt)
123+
{
124+
k -= cnt;
125+
++curr;
126+
}
127+
else
128+
{
129+
--k;
130+
curr *= 10;
131+
}
132+
}
133+
return (int) curr;
134+
}
135+
136+
int count(long long curr) {
137+
long long next = curr + 1;
138+
int cnt = 0;
139+
while (curr <= n)
140+
{
141+
cnt += min(n - curr + 1, next - curr);
142+
next *= 10;
143+
curr *= 10;
144+
}
145+
return cnt;
146+
}
147+
};
148+
```
55149

150+
### **Go**
151+
152+
```go
153+
func findKthNumber(n int, k int) int {
154+
count := func(curr int) int {
155+
next := curr + 1
156+
cnt := 0
157+
for curr <= n {
158+
cnt += min(n-curr+1, next-curr)
159+
next *= 10
160+
curr *= 10
161+
}
162+
return cnt
163+
}
164+
curr := 1
165+
k--
166+
for k > 0 {
167+
cnt := count(curr)
168+
if k >= cnt {
169+
k -= cnt
170+
curr++
171+
} else {
172+
k--
173+
curr *= 10
174+
}
175+
}
176+
return curr
177+
}
178+
179+
func min(a, b int) int {
180+
if a < b {
181+
return a
182+
}
183+
return b
184+
}
56185
```
57186

58187
### **...**

solution/0400-0499/0440.K-th Smallest in Lexicographical Order/README_EN.md

Lines changed: 130 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,142 @@
3636
### **Python3**
3737

3838
```python
39-
39+
class Solution:
40+
def findKthNumber(self, n: int, k: int) -> int:
41+
def count(curr):
42+
next, cnt = curr + 1, 0
43+
while curr <= n:
44+
cnt += min(n - curr + 1, next - curr)
45+
next, curr = next * 10, curr * 10
46+
return cnt
47+
48+
curr = 1
49+
k -= 1
50+
while k:
51+
cnt = count(curr)
52+
if k >= cnt:
53+
k -= cnt
54+
curr += 1
55+
else:
56+
k -= 1
57+
curr *= 10
58+
return curr
4059
```
4160

4261
### **Java**
4362

4463
```java
64+
class Solution {
65+
private int n;
66+
67+
public int findKthNumber(int n, int k) {
68+
this.n = n;
69+
long curr = 1;
70+
--k;
71+
while (k > 0) {
72+
int cnt = count(curr);
73+
if (k >= cnt) {
74+
k -= cnt;
75+
++curr;
76+
} else {
77+
--k;
78+
curr *= 10;
79+
}
80+
}
81+
return (int) curr;
82+
}
83+
84+
85+
public int count(long curr) {
86+
long next = curr + 1;
87+
long cnt = 0;
88+
while (curr <= n) {
89+
cnt += Math.min(n - curr + 1, next - curr);
90+
next *= 10;
91+
curr *= 10;
92+
}
93+
return (int) cnt;
94+
}
95+
}
96+
```
97+
98+
### **C++**
99+
100+
```cpp
101+
class Solution {
102+
public:
103+
int n;
104+
105+
int findKthNumber(int n, int k) {
106+
this->n = n;
107+
--k;
108+
long long curr = 1;
109+
while (k)
110+
{
111+
int cnt = count(curr);
112+
if (k >= cnt)
113+
{
114+
k -= cnt;
115+
++curr;
116+
}
117+
else
118+
{
119+
--k;
120+
curr *= 10;
121+
}
122+
}
123+
return (int) curr;
124+
}
125+
126+
int count(long long curr) {
127+
long long next = curr + 1;
128+
int cnt = 0;
129+
while (curr <= n)
130+
{
131+
cnt += min(n - curr + 1, next - curr);
132+
next *= 10;
133+
curr *= 10;
134+
}
135+
return cnt;
136+
}
137+
};
138+
```
45139

140+
### **Go**
141+
142+
```go
143+
func findKthNumber(n int, k int) int {
144+
count := func(curr int) int {
145+
next := curr + 1
146+
cnt := 0
147+
for curr <= n {
148+
cnt += min(n-curr+1, next-curr)
149+
next *= 10
150+
curr *= 10
151+
}
152+
return cnt
153+
}
154+
curr := 1
155+
k--
156+
for k > 0 {
157+
cnt := count(curr)
158+
if k >= cnt {
159+
k -= cnt
160+
curr++
161+
} else {
162+
k--
163+
curr *= 10
164+
}
165+
}
166+
return curr
167+
}
168+
169+
func min(a, b int) int {
170+
if a < b {
171+
return a
172+
}
173+
return b
174+
}
46175
```
47176

48177
### **...**
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution {
2+
public:
3+
int n;
4+
5+
int findKthNumber(int n, int k) {
6+
this->n = n;
7+
--k;
8+
long long curr = 1;
9+
while (k)
10+
{
11+
int cnt = count(curr);
12+
if (k >= cnt)
13+
{
14+
k -= cnt;
15+
++curr;
16+
}
17+
else
18+
{
19+
--k;
20+
curr *= 10;
21+
}
22+
}
23+
return (int) curr;
24+
}
25+
26+
int count(long long curr) {
27+
long long next = curr + 1;
28+
int cnt = 0;
29+
while (curr <= n)
30+
{
31+
cnt += min(n - curr + 1, next - curr);
32+
next *= 10;
33+
curr *= 10;
34+
}
35+
return cnt;
36+
}
37+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
func findKthNumber(n int, k int) int {
2+
count := func(curr int) int {
3+
next := curr + 1
4+
cnt := 0
5+
for curr <= n {
6+
cnt += min(n-curr+1, next-curr)
7+
next *= 10
8+
curr *= 10
9+
}
10+
return cnt
11+
}
12+
curr := 1
13+
k--
14+
for k > 0 {
15+
cnt := count(curr)
16+
if k >= cnt {
17+
k -= cnt
18+
curr++
19+
} else {
20+
k--
21+
curr *= 10
22+
}
23+
}
24+
return curr
25+
}
26+
27+
func min(a, b int) int {
28+
if a < b {
29+
return a
30+
}
31+
return b
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution {
2+
private int n;
3+
4+
public int findKthNumber(int n, int k) {
5+
this.n = n;
6+
long curr = 1;
7+
--k;
8+
while (k > 0) {
9+
int cnt = count(curr);
10+
if (k >= cnt) {
11+
k -= cnt;
12+
++curr;
13+
} else {
14+
--k;
15+
curr *= 10;
16+
}
17+
}
18+
return (int) curr;
19+
}
20+
21+
22+
public int count(long curr) {
23+
long next = curr + 1;
24+
long cnt = 0;
25+
while (curr <= n) {
26+
cnt += Math.min(n - curr + 1, next - curr);
27+
next *= 10;
28+
curr *= 10;
29+
}
30+
return (int) cnt;
31+
}
32+
}

0 commit comments

Comments
 (0)