思路:动态规划,然后发现超时,思考了下原因,估计是每次尝试的时候都要尝试1进去,然后1显示在大树的时候不是最快的,于是换了一个测试方法,顺带优化了下算法,311ms
又想了下,关于最小值处理的时候应该带入上一次测试的平方数,下一次处理的平方数不能大于上一次处理的平方数,不过这样不利于冬天规划,所以还是算了。
public class Solution {
Map<Integer, Integer> map=new HashMap<Integer, Integer>();
public int numSquares(int n) {
if (n<4) {
return n;
}
if (map.get(n)==null) {
int s=(int) Math.sqrt(n);
if (s*s==n) {
return 1;
}
int ans=numSquares(n-s*s);
//凭感觉处理了一下测试的最小值
for (int i = s-1; i >=Math.max(s/2, 1); i--) {
int t=numSquares(n-i*i);
if (t<ans) {
ans=t;
}
}
map.put(n, 1+ans);
}
return map.get(n);
}
}