动态规划 立扣题
剪绳子
立扣343. 整数拆分
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
func cuttingRope(n int) int { // n 米长的绳子
dp := make([]int, n+1) //范围从1到n
dp[1] = 1
dp[2] = 1
for i := 3; i < n+1; i++ {
curMax := 1
for j := 1; j <= i; j++ {
// 要么直接分成 i 和 i-j 两段,要么将剩下的一段继续分割
curMax = Max(curMax, Max(j*dp[i-j], j*(i-j)))
}
dp[i] = curMax
}
return dp[n]
}
func Max(x, y int) int {
if x > y {
return x
}
return y
}
立扣72题,编辑距离
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
例一
输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')