Perfect Squares
Description:
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, …) which sum to n.
Example:
Given n = 12, return 3 because 12 = 4 + 4 + 4
Given n = 13, return 2 because 13 = 4 + 9
分析:
动态规划。
假设dp[i]表示当n = i时的最小数,sqrNum存储的是所有不大于n的perfect square number。则对于i以及sqrNum中的数sqrNum[j]
- 如果
i > sqrNum[j],有状态转移方程dp[i] = min(dp[i], dp[i - sqrNum[j]] + dp[sqrNum[j]])。 - 如果
i == sqrNum[j],有状态转移方程dp[i] = 1。
不过时间复杂度是O(nlogn),应该还可以优化。
Code:
1 | class Solution { |