288 字
1 分钟
LeetCode-279. 完全平方数
动态规划
给你一个整数
n,返回 和为n的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,
1、4、9和16都是完全平方数,而3和11不是。
示例 1:
输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:
输入:n = 13输出:2解释:13 = 4 + 9
思路
初识背包问题
这是一个完全背包问题,每个数字的重量为1,价值也为1。
这题的逻辑就是:dp[i]储存每个数字的最小合成次数,对于dp[9]来说,有 dp[9] = dp[8] + 1和 dp[9] = dp[8] + 4和其他可能。这样通过循环可以得到dp[9]的最小值,而 dp[0]、dp[1] …这样可以一直实现dp[9],从而完成本题。
func numSquares(n int) int { dp := make([]int, n+1)
dp[0] = 0 for i := 1; i <= n; i++ { dp[i] = math.MaxInt32 }
for i := 0; i <= n; i++ { for j := 0; j*j <= i; j++ { dp[i] = min(dp[i], dp[i-j*j]+1) } }
return dp[n]} LeetCode-279. 完全平方数
https://sheep44044.github.io/posts/算法/动态规划/leetcode-279-完全平方数/