File tree 8 files changed +103
-2
lines changed
problemset/get-kth-magic-number-lcci
8 files changed +103
-2
lines changed Original file line number Diff line number Diff line change 2
2
3
3
<p align =" center " >
4
4
<!-- TOPICS COUNT START -->
5
- <img src =" https://img.shields.io/badge/-进度:506 -green " alt =" 进度:506 " >
5
+ <img src =" https://img.shields.io/badge/-进度:507 -green " alt =" 进度:507 " >
6
6
<!-- TOPICS COUNT END -->
7
7
<a href =" ./assets/docs/TOPICS.md " ><img src =" https://img.shields.io/badge/-题库目录-blue " alt =" 题库目录 " ></a >
8
8
<a href =" ./assets/docs/CATEGORIES.md " ><img src =" https://img.shields.io/badge/-题库分类-red " alt =" 题库分类 " ></a >
Original file line number Diff line number Diff line change 1632
1632
"title" : " 粉刷房子" ,
1633
1633
"path" : " ./problemset/paint-house/README.md" ,
1634
1634
"difficulty" : " 中等"
1635
+ },
1636
+ {
1637
+ "id" : " 面试题 17.09" ,
1638
+ "title" : " 第 k 个数" ,
1639
+ "path" : " ./problemset/get-kth-magic-number-lcci/README.md" ,
1640
+ "difficulty" : " 中等"
1635
1641
}
1636
1642
]
1637
1643
},
Original file line number Diff line number Diff line change 5058
5058
"difficulty" : " 简单" ,
5059
5059
"url" : " https://leetcode.cn/problems/check-permutation-lcci/" ,
5060
5060
"path" : " ./problemset/check-permutation-lcci/README.md"
5061
+ },
5062
+ {
5063
+ "id" : " 面试题 17.09" ,
5064
+ "title" : {
5065
+ "cn" : " 第 k 个数" ,
5066
+ "en" : " get-kth-magic-number-lcci"
5067
+ },
5068
+ "difficulty" : " 中等" ,
5069
+ "url" : " https://leetcode.cn/problems/get-kth-magic-number-lcci/" ,
5070
+ "path" : " ./problemset/get-kth-magic-number-lcci/README.md"
5061
5071
}
5062
5072
]
Original file line number Diff line number Diff line change 305
305
| 1994. [ 好子集的数目] ( ../../problemset/the-number-of-good-subsets/README.md ) | 困难 |
306
306
| 2100. [ 适合打劫银行的日子] ( ../../problemset/find-good-days-to-rob-the-bank/README.md ) | 中等 |
307
307
| 剑指 Offer II 091. [ 粉刷房子] ( ../../problemset/paint-house/README.md ) | 中等 |
308
+ | 面试题 17.09. [ 第 k 个数] ( ../../problemset/get-kth-magic-number-lcci/README.md ) | 中等 |
308
309
309
310
## 双指针
310
311
Original file line number Diff line number Diff line change 1010
1010
1011
1011
[ 面试题 17.19. 消失的两个数字] ( ../../problemset/missing-two-lcci/README.md )
1012
1012
1013
- [ 面试题 01.02. 判定是否互为字符重排] ( ../../problemset/check-permutation-lcci/README.md )
1013
+ [ 面试题 01.02. 判定是否互为字符重排] ( ../../problemset/check-permutation-lcci/README.md )
1014
+
1015
+ [ 面试题 17.09. 第 k 个数] ( ../../problemset/get-kth-magic-number-lcci/README.md )
Original file line number Diff line number Diff line change
1
+ # 第 k 个数
2
+
3
+ > 难度:中等
4
+ >
5
+ > https://leetcode.cn/problems/get-kth-magic-number-lcci/
6
+
7
+ ## 题目
8
+
9
+ 有些数的素因子只有 3,5,7,请设计一个算法找出第 ` k ` 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
10
+
11
+ ### 示例 1:
12
+
13
+ ```
14
+ 输入: k = 5
15
+
16
+ 输出: 9
17
+ ```
18
+
19
+ ## 解题
20
+
21
+ ``` ts
22
+ /**
23
+ * 动态规划
24
+ * @desc 时间复杂度 O(N) 空间复杂度 O(N)
25
+ * @param k
26
+ * @returns
27
+ */
28
+ export function getKthMagicNumber(k : number ): number {
29
+ const dp = new Array (k + 1 ).fill (0 )
30
+ dp [1 ] = 1
31
+ let p3 = 1
32
+ let p5 = 1
33
+ let p7 = 1
34
+ for (let i = 2 ; i <= k ; i ++ ) {
35
+ const num3 = dp [p3 ] * 3
36
+ const num5 = dp [p5 ] * 5
37
+ const num7 = dp [p7 ] * 7
38
+ dp [i ] = Math .min (Math .min (num3 , num5 ), num7 )
39
+ if (dp [i ] === num3 ) p3 ++
40
+ if (dp [i ] === num5 ) p5 ++
41
+ if (dp [i ] === num7 ) p7 ++
42
+ }
43
+ return dp [k ]
44
+ }
45
+ ```
Original file line number Diff line number Diff line change
1
+ import { describe , expect , it } from 'vitest'
2
+ import { getKthMagicNumber } from '.'
3
+
4
+ describe ( '第 k 个数' , ( ) => {
5
+ testCase ( getKthMagicNumber )
6
+ } )
7
+
8
+ function testCase ( fn : ( k : number ) => number ) {
9
+ it . each ( [
10
+ [ 5 , 9 ] ,
11
+ ] ) ( '示例%#' , ( k , expected ) => {
12
+ expect ( fn ( k ) ) . toBe ( expected )
13
+ } )
14
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * 动态规划
3
+ * @desc 时间复杂度 O(N) 空间复杂度 O(N)
4
+ * @param k
5
+ * @returns
6
+ */
7
+ export function getKthMagicNumber ( k : number ) : number {
8
+ const dp = new Array ( k + 1 ) . fill ( 0 )
9
+ dp [ 1 ] = 1
10
+ let p3 = 1
11
+ let p5 = 1
12
+ let p7 = 1
13
+ for ( let i = 2 ; i <= k ; i ++ ) {
14
+ const num3 = dp [ p3 ] * 3
15
+ const num5 = dp [ p5 ] * 5
16
+ const num7 = dp [ p7 ] * 7
17
+ dp [ i ] = Math . min ( Math . min ( num3 , num5 ) , num7 )
18
+ if ( dp [ i ] === num3 ) p3 ++
19
+ if ( dp [ i ] === num5 ) p5 ++
20
+ if ( dp [ i ] === num7 ) p7 ++
21
+ }
22
+ return dp [ k ]
23
+ }
You can’t perform that action at this time.
0 commit comments