Skip to content

Commit 998cecd

Browse files
committed
feat: add solutions to lcci problem: No.17.09
No.17.09.Get Kth Magic Number
1 parent 0d00407 commit 998cecd

File tree

5 files changed

+243
-0
lines changed

5 files changed

+243
-0
lines changed

lcci/17.09.Get Kth Magic Number/README.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,92 @@ func min(a, b int) int {
238238
}
239239
```
240240

241+
### **C**
242+
243+
```c
244+
#define min(a,b) (((a) < (b)) ? (a) : (b))
245+
246+
int getKthMagicNumber(int k) {
247+
int *dp = (int *) malloc(sizeof(int) * k);
248+
dp[0] = 1;
249+
int index[3] = {0, 0, 0};
250+
for (int i = 1; i < k; i++) {
251+
int a = dp[index[0]] * 3;
252+
int b = dp[index[1]] * 5;
253+
int c = dp[index[2]] * 7;
254+
int num = min(a, min(b, c));
255+
dp[i] = num;
256+
if (a == num) {
257+
index[0]++;
258+
}
259+
if (b == num) {
260+
index[1]++;
261+
}
262+
if (c == num) {
263+
index[2]++;
264+
}
265+
}
266+
int res = dp[k - 1];
267+
free(dp);
268+
return res;
269+
}
270+
```
271+
272+
### **TypeScript**
273+
274+
```ts
275+
function getKthMagicNumber(k: number): number {
276+
const dp = [1];
277+
const index = [0, 0, 0];
278+
while (dp.length < k) {
279+
const a = dp[index[0]] * 3;
280+
const b = dp[index[1]] * 5;
281+
const c = dp[index[2]] * 7;
282+
const num = Math.min(a, b, c);
283+
dp.push(num);
284+
if (a === num) {
285+
index[0]++;
286+
}
287+
if (b === num) {
288+
index[1]++;
289+
}
290+
if (c === num) {
291+
index[2]++;
292+
}
293+
}
294+
return dp[k - 1];
295+
}
296+
```
297+
298+
### **Rust**
299+
300+
```rust
301+
impl Solution {
302+
pub fn get_kth_magic_number(k: i32) -> i32 {
303+
let k = k as usize;
304+
let mut dp = vec![1];
305+
let mut index = [0, 0, 0];
306+
for _ in 1..k {
307+
let a = dp[index[0]] * 3;
308+
let b = dp[index[1]] * 5;
309+
let c = dp[index[2]] * 7;
310+
let num = a.min(b.min(c));
311+
dp.push(num);
312+
if a == num {
313+
index[0] += 1;
314+
}
315+
if b == num {
316+
index[1] += 1;
317+
}
318+
if c == num {
319+
index[2] += 1;
320+
}
321+
}
322+
dp[k - 1]
323+
}
324+
}
325+
```
326+
241327
### **...**
242328

243329
```

lcci/17.09.Get Kth Magic Number/README_EN.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,92 @@ func min(a, b int) int {
215215
}
216216
```
217217

218+
### **C**
219+
220+
```c
221+
#define min(a,b) (((a) < (b)) ? (a) : (b))
222+
223+
int getKthMagicNumber(int k) {
224+
int *dp = (int *) malloc(sizeof(int) * k);
225+
dp[0] = 1;
226+
int index[3] = {0, 0, 0};
227+
for (int i = 1; i < k; i++) {
228+
int a = dp[index[0]] * 3;
229+
int b = dp[index[1]] * 5;
230+
int c = dp[index[2]] * 7;
231+
int num = min(a, min(b, c));
232+
dp[i] = num;
233+
if (a == num) {
234+
index[0]++;
235+
}
236+
if (b == num) {
237+
index[1]++;
238+
}
239+
if (c == num) {
240+
index[2]++;
241+
}
242+
}
243+
int res = dp[k - 1];
244+
free(dp);
245+
return res;
246+
}
247+
```
248+
249+
### **TypeScript**
250+
251+
```ts
252+
function getKthMagicNumber(k: number): number {
253+
const dp = [1];
254+
const index = [0, 0, 0];
255+
while (dp.length < k) {
256+
const a = dp[index[0]] * 3;
257+
const b = dp[index[1]] * 5;
258+
const c = dp[index[2]] * 7;
259+
const num = Math.min(a, b, c);
260+
dp.push(num);
261+
if (a === num) {
262+
index[0]++;
263+
}
264+
if (b === num) {
265+
index[1]++;
266+
}
267+
if (c === num) {
268+
index[2]++;
269+
}
270+
}
271+
return dp[k - 1];
272+
}
273+
```
274+
275+
### **Rust**
276+
277+
```rust
278+
impl Solution {
279+
pub fn get_kth_magic_number(k: i32) -> i32 {
280+
let k = k as usize;
281+
let mut dp = vec![1];
282+
let mut index = [0, 0, 0];
283+
for _ in 1..k {
284+
let a = dp[index[0]] * 3;
285+
let b = dp[index[1]] * 5;
286+
let c = dp[index[2]] * 7;
287+
let num = a.min(b.min(c));
288+
dp.push(num);
289+
if a == num {
290+
index[0] += 1;
291+
}
292+
if b == num {
293+
index[1] += 1;
294+
}
295+
if c == num {
296+
index[2] += 1;
297+
}
298+
}
299+
dp[k - 1]
300+
}
301+
}
302+
```
303+
218304
### **...**
219305

220306
```
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#define min(a,b) (((a) < (b)) ? (a) : (b))
2+
3+
int getKthMagicNumber(int k) {
4+
int *dp = (int *) malloc(sizeof(int) * k);
5+
dp[0] = 1;
6+
int index[3] = {0, 0, 0};
7+
for (int i = 1; i < k; i++) {
8+
int a = dp[index[0]] * 3;
9+
int b = dp[index[1]] * 5;
10+
int c = dp[index[2]] * 7;
11+
int num = min(a, min(b, c));
12+
dp[i] = num;
13+
if (a == num) {
14+
index[0]++;
15+
}
16+
if (b == num) {
17+
index[1]++;
18+
}
19+
if (c == num) {
20+
index[2]++;
21+
}
22+
}
23+
int res = dp[k - 1];
24+
free(dp);
25+
return res;
26+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
impl Solution {
2+
pub fn get_kth_magic_number(k: i32) -> i32 {
3+
let k = k as usize;
4+
let mut dp = vec![1];
5+
let mut index = [0, 0, 0];
6+
for _ in 1..k {
7+
let a = dp[index[0]] * 3;
8+
let b = dp[index[1]] * 5;
9+
let c = dp[index[2]] * 7;
10+
let num = a.min(b.min(c));
11+
dp.push(num);
12+
if a == num {
13+
index[0] += 1;
14+
}
15+
if b == num {
16+
index[1] += 1;
17+
}
18+
if c == num {
19+
index[2] += 1;
20+
}
21+
}
22+
dp[k - 1]
23+
}
24+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function getKthMagicNumber(k: number): number {
2+
const dp = [1];
3+
const index = [0, 0, 0];
4+
while (dp.length < k) {
5+
const a = dp[index[0]] * 3;
6+
const b = dp[index[1]] * 5;
7+
const c = dp[index[2]] * 7;
8+
const num = Math.min(a, b, c);
9+
dp.push(num);
10+
if (a === num) {
11+
index[0]++;
12+
}
13+
if (b === num) {
14+
index[1]++;
15+
}
16+
if (c === num) {
17+
index[2]++;
18+
}
19+
}
20+
return dp[k - 1];
21+
}

0 commit comments

Comments
 (0)