LeetCode 题解:279. 完全平方数,动态规划,JavaScript,详细注释
原题链接:279. 完全平方数
解题思路:
本题类似于322. 零钱兑换,如果你对
322. 零钱兑换
不熟悉,可以先看[题解](https://leetcode-cn.com/problems/coin-change/solution/leetcodeti-jie-322-ling-qian-dui-huan-do-etlo/)。二者的区别是硬币种类不固定,在本题中,对于当前金额i
,硬币种类为小于i
的完全平方数。该题递推的是从
1
开始,使用小于i
完全平方数,计算能够凑到i
的最小数量,由此不断累加到n
的过程。创建一个长度为
n + 1
的dp
数组,用索引就表示从0
到n
的数字。对于当前数字
i
,我们可以用for (let j = 1; j * j <= i; j++) {}
,计算出小于i
的完全平方数。i
是由i - j * j
用 1 个j * j
凑过来,同时要保证它是所有结果中最小的一个,因此状态转移返程为:dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/bb8ad7262801b62d567c26bc3】。文章转载请联系作者。
评论