</pre><pre name="code" class="java">public class Solution {
public int numSquares(int n) {
int arr[] = new int[n+1];
arr[1] = 1;
for(int i=2 ;i<=n; i++){
int j=1;
int min = 10000000;
while(j*j<=i){
if(j*j == i){
min = 1;
}
min = min>arr[i-j*j]+1?arr[i-j*j]+1:min;
++j;
}
arr[i] = min;
}
return arr[n];
}
}
解析:此题使用动态规划(dynamic programming)
【动态规划】
1.characterize the structure of an optimal solution.
2.recursively define the value of an optimal solution.
3.compute the value of an optimal solution. typically in a bottom-up fashion.
4.construct an optimal solution from computed information.
此题中:先定义一个数组,用来存放<=n的所有最优解,从1到n依次算出每一个值的最优解并存储留作后用。