找完全平方数加和,哇赤裸裸的dp啊。
第一遍超时了 = =这种状态迁移方程复杂度较高
第二遍膜了一遍题解区的大佬们代码,涨知识辽,(vector原来可以这么用)。
新的状态迁移方程dp[i+jj]=min(dp[i+jj],dp[i]+1),每次一个普通数加上一个完全平方数的话就可以降低复杂度。
// 超时代码 = =
class Solution {
public:
int numSquares(int n) {
int dp[n+1] = {
INT_MAX};
dp[1] = 1;
for(int i = 1 ; i*i <= n ; i