思路展示
示例代码
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n+1,INT_MAX);
//实际上我们无法表示数字 0,只是为了保证状态转移过程中遇到 j 恰为i^1/2的情况合法。
dp[0]=0;
for(int i=1;i<=n;i++){
//j的平方不能超过i
for(int j=1;j*j<=i;j++){
//位置i只依赖于i-k^2
dp[i]=min(dp[i],dp[i-j*j]+1);
}
}
return dp[n];
}
};
效果展示
相似题目