解题思路:
dp[i]表示组成i的平方项数目
例如:dp[0]=0,dp[1]=1,dp[2]=2,dp[3]=3,dp[4]=1
dp[i]的最差情况为i,表示由i个1组成
遍历2~sqrt(i)
状态转移方程为 :
dp[i]=i;
dp[i]=min(dp[i],dp[i-j*j]+1)
class Solution {
public int numSquares(int n) {
int dp[]=new int[n+1];
for(int i=0;i<=n;i++)
{
dp[i]=i;//最坏的情况,i有1构成没有平方项
for(int j=2;j*j<=i;j++)
{
dp[i]=Math.min(dp[i],dp[i-j*j]+1);
}
}
return dp[n];
}
}