问题描述
解题报告
d
p
[
i
]
dp[i]
dp[i] 表示最小个数。
需要注意的是:
d
p
[
0
]
=
0
dp[0]=0
dp[0]=0 因为输入是正整数,所以若
i
i
i 是完全平方数,则
d
p
[
i
]
=
1
+
d
p
[
0
]
=
1
dp[i]=1+dp[0]=1
dp[i]=1+dp[0]=1,即最少完全平方数为
i
\sqrt i
i
实现代码
class Solution {
public:
int numSquares(int n) {
vector<int>dp(n+1,9999);
dp[0]=0;
for(int i=1;i<=n;i++){
for(int j=1;j*j<=i;j++){
dp[i]=min(dp[i],1+dp[i-j*j]);
}
}
return dp[n];
}
};