(记忆线:当时一刷完是1-205. 二刷88道。下次更新记得标记不能bug-free的原因。)
88-------------Perfect Squares(完美平方数。给一个整数,求出用平方数来相加得到最小的个数)
public class Solution{ public static void main(String[] args){ System.out.println(numSquares(8)); } public static int numSquares(int n){ //dp[n]=dp[i + j*j] = min(dp[i]+1,dp[i + j*j]); int dp[] = new int[n+1]; for (int i = 1; i * i <= n; i++) { dp[i * i] = 1; } for(int i = 1; i <= n; i++){ for(int j = 1; i + j*j <= n; j++){ if(dp[i + j * j] == 0){ dp[i + j * j] = dp[i] + 1; } dp[i + j * j] = Math.min(dp[i + j * j], dp[i] + 1); } } return dp[n]; } }