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 { |