279. 完全平方数
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...
)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
动态转移方程为:dp[i] = MIN(dp[i], dp[i - j * j] + 1)
,i
表示当前数字,j*j
表示平方数。
示例 1:
1 | 输入: n = 12 |
示例 2:
1 | 输入: n = 13 |
使用 dp 数组来保存以当前下标为和的完全平方数的个数。依次对每个数判断是否可以使用之前的dp数组中的值加一个较大的完全平方数得到。
1 | class Solution { |
时间复杂度为O(n*sqrt(n)),空间复杂度为 O(n)。