Skip to content

Commit c25b925

Browse files
committed
添加题72,322,92
1 parent 7dacb10 commit c25b925

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

‎基础算法篇/动态规划.md‎

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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[][] =newArray(l1+1).fill(0).map(() =>newArray(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+
returndp[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[] =newArray(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+
returndp[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[][] =newArray(A.length+1).fill(false).map(()=>newArray(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+
returni
440+
}
441+
}
442+
return0
443+
}
444+
```
371445

0 commit comments

Comments
(0)