279. 完全平方数
题目描述:
给你一个整数 n ,返回和为 n 的完全平方数的最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
考察重点:动态规划。写出转移方程:1+min(nums[i-j^2]) 1<=j*j<=i。即当前整数n最少完全平方数的数量,等于整数m最少完全平方数的数量+1,且有n-m为完全平方数。
func NumSquares(n int) int { //动态规划,对于一个整数i,最少平方和个数为:1 + min(nums[i-j*j]) 1<j*j<i,即在上一个数的基础上,再加j*j得到nums := make([]int, n+1) //nums的序数是目标和,nums的值是所需的最少平方和个数for i := 1; i <= n; i++ {minNum := 1000000for j := 1; j*j <= i; j++ {minNum = min(minNum, nums[i-j*j])}nums[i] = minNum + 1}return nums[n]
}func min(a, b int) int {if a > b {return b}return a
}