Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.
Example 1:
Input: n = 12
Output: 3
Explanation: 12 = 4 + 4 + 4.
Example 2:
Input: n = 13
Output: 2
Explanation: 13 = 4 + 9.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/perfect-squares
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
1. dp[i]表示构成i这个数构成平方和需要数字的最小个数
2. 当j*j<i的时候,temp中保存j从1开始每加1得到的dp[i-j*j] + 1的最小值
3. 当j*j=i的时候,dp[i]的值就直接为1
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n+1);
dp[1] = 1;
for(int i = 2; i <= n; i++){
int temp = 999999999;
for(int j = 1; j*j <= i; j++){
if(j*j == i){
temp = 1;
break;
}
temp = min(temp, dp[i-j*j]+1);
}
dp[i] = temp;
}
return dp[n];
}
};