279. 完全平方数

  1. class Solution {
  2. public int numSquares(int n) {
  3. int[] dp = new int[n + 1];
  4. Arrays.fill(dp, Integer.MAX_VALUE);
  5. dp[0] = 0;
  6. int maxSquareLen = (int)Math.sqrt(n) + 1;
  7. int[] squareNum = new int[maxSquareLen];
  8. for (int i = 0; i < maxSquareLen; i++) {
  9. squareNum[i] = i * i;
  10. }
  11. for (int i = 1; i <= n; i++) {
  12. for (int index = 1; index < maxSquareLen; index++) {
  13. if (i < squareNum[index]) {
  14. break;
  15. }
  16. dp[i] = Math.min(dp[i], dp[i - squareNum[index]] + 1);
  17. }
  18. }
  19. return dp[n];
  20. }
  21. }