279. Perfect Squares
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, …) which sum to n.
For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.
279. 完全平方数
给定一个正数n,找到最少个数的完全平方数,相加为n
比如:给定n=12,12=4+4+4因此返回3;给定n=13,13=4+9因此返回2。
思路
可以用动态规划(DP)来做,用数组dp保存完全平方数个数,dp[n]代表正数n的最小完全平方数个数,所以 dp[n]=min(dp[n−i2]+1),1≤i≤n√。
代码
public:
int numSquares(int n) {
vector<int> dp{0};
while(dp.size()<=n){
int m = dp.size(), nums = INT_MAX;
for(int i=1; i*i<=m; i++){
nums = min(dp[m-i*i]+1, nums);
}
dp.push_back(nums);
}
return dp[n];
}
};