@@ -367,5 +367,79 @@ function longestCommonSubsequence(text1: string, text2: string): number {
367367};
368368```
369369
370+ ##### [ 72. 编辑距离] ( https://leetcode-cn.com/problems/edit-distance/ )
370371
372+ 给你两个单词 ` word1 ` 和 ` word2 ` ,请你计算出将 ` word1 ` 转换成 ` word2 ` 所使用的最少操作数 。
373+
374+ ``` tsx
375+ function minDistance(word1 : string , word2 : string ): number {
376+ let l1: number = word1 .length
377+ let l2: number = word2 .length
378+ let dp: number [][] = new Array (l1 + 1 ).fill (0 ).map (() => new Array (l2 + 1 ).fill (0 ))
379+ for (let i = 0 ; i <= l1 ; i ++ ) {
380+ dp [i ][0 ] = i
381+ }
382+ for (let j = 0 ; j <= l2 ; j ++ ) {
383+ dp [0 ][j ] = j
384+ }
385+ for (let i = 1 ; i <= l1 ; i ++ ) {
386+ for (let j = 1 ; j <= l2 ; j ++ ) {
387+ if (word1 [i - 1 ] === word2 [j - 1 ]) {
388+ dp [i ][j ] = dp [i - 1 ][j - 1 ]
389+ } else {
390+ dp [i ][j ] = Math .min (dp [i - 1 ][j - 1 ], dp [i - 1 ][j ], dp [i ][j - 1 ]) + 1
391+ }
392+ }
393+ }
394+ return dp [l1 ][l2 ]
395+ };
396+ ```
397+
398+ ## 零钱和背包(10%)
399+
400+ ##### [ 322. 零钱兑换] ( https://leetcode-cn.com/problems/coin-change/ )
401+
402+ 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
403+
404+ ``` tsx
405+ function coinChange(coins : number [], amount : number ): number {
406+ const dp: number [] = new Array (amount + 1 ).fill (amount + 1 )
407+ dp [0 ] = 0
408+ for (let i = 1 ; i <= amount ; i ++ ) {
409+ for (let j = 0 ; j < coins .length ; j ++ ) {
410+ if (i - coins [j ] >= 0 ) {
411+ dp [i ] = Math .min (dp [i ], dp [i - coins [j ]] + 1 )
412+ }
413+ }
414+ }
415+ if (dp [amount ] > amount ) {
416+ return - 1
417+ }
418+ return dp [amount ]
419+ };
420+ ```
421+
422+ ##### [ 92.背包问题] ( https://www.lintcode.com/problem/backpack/description )
423+
424+ 在` n ` 个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为` m ` ,每个物品的大小为Ai
425+
426+ ``` tsx
427+ function backpack(m : number , A : number []): number {
428+ const dp: boolean [][] = new Array (A .length + 1 ).fill (false ).map (()=> new Array (m + 1 ).fill (false ))
429+ for (let i= 1 ;i <= A .length ;i ++ ){
430+ for (let j= 0 ;j <= m ;j ++ ){
431+ dp [i ][j ] = dp [i - 1 ][j ]
432+ if (j - A [i - 1 ] >= 0 && dp [i - 1 ][j - A [i - 1 ]]){
433+ dp [i ][j ] = true
434+ }
435+ }
436+ }
437+ for (let i= m ;i >= 0 ;i -- ){
438+ if (dp [A .length ][i ]){
439+ return i
440+ }
441+ }
442+ return 0
443+ }
444+ ```
371445
0 commit comments