mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
添加 0474.一和零 (三维数组,动态规划,好理解)Go语言版本
添加 0474.一和零 (三维数组,动态规划,好理解)Go语言版本
This commit is contained in:
@ -248,6 +248,53 @@ func max(a,b int) int {
|
||||
return b
|
||||
}
|
||||
```
|
||||
> 传统背包,三维数组法
|
||||
```golang
|
||||
func findMaxForm(strs []string, m int, n int) int {
|
||||
//dp的第一个index代表项目的多少,第二个代表的是背包的容量
|
||||
//所以本处项目的多少是len(strs),容量为m和n
|
||||
dp:=make([][][]int,len(strs)+1)
|
||||
for i:=0;i<=len(strs);i++{
|
||||
//初始化背包容量
|
||||
strDp:=make([][]int,m+1)
|
||||
for j:=0;j<m+1;j++{
|
||||
tmp:=make([]int,n+1)
|
||||
strDp[j]=tmp
|
||||
}
|
||||
dp[i]=strDp
|
||||
}
|
||||
for k,value:=range strs{
|
||||
//统计每个字符串0和1的个数
|
||||
var zero,one int
|
||||
for _,v:=range value{
|
||||
if v=='0'{
|
||||
zero++
|
||||
}else{
|
||||
one++
|
||||
}
|
||||
}
|
||||
k+=1
|
||||
//计算dp
|
||||
for i:=0;i<=m;i++{
|
||||
for j:=0;j<=n;j++{
|
||||
//如果装不下
|
||||
dp[k][i][j]=dp[k-1][i][j]
|
||||
//如果装的下
|
||||
if i>=zero&&j>=one{
|
||||
dp[k][i][j]=getMax(dp[k-1][i][j],dp[k-1][i-zero][j-one]+1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return dp[len(strs)][m][n]
|
||||
}
|
||||
func getMax(a,b int)int{
|
||||
if a>b{
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
```
|
||||
|
||||
Javascript:
|
||||
```javascript
|
||||
|
Reference in New Issue
Block a user