279. 完全平方数(中等)
-
思路
- 定义一维矩阵 dp ,其中 dp[i] 表示数字 i最少可以由几个完全平方数相加构成。
- 在本题中,位置 i 只依赖于i-k2 的位置,如 i-1 、 i-4、i-9等,才能满足完全平方分割的条件。因此 dp[i] 可以取得最小值为
1 +min(dp[i-1], dp[i-4], dp[i-9]...)
。
-
代码
class Solution { public: int numSquares(int n) { vector<int> dp(n+1, INT_MAX); dp[0] = 0; for(int i=1; i<=n; ++i){ for(int j=1; j*j<=i; ++j){ dp[i] = min(dp[i], dp[i-j*j] + 1); } } return dp[n]; } };