Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...
) which sum to n.
Example 1:
Input: n =12
Output: 3 Explanation:12 = 4 + 4 + 4.
Example 2:
Input: n =13
Output: 2 Explanation:13 = 4 + 9.
public class Solution { public int numSquares(int n) { int[] dp = new int[n + 1]; Arrays.fill(dp, Integer.MAX_VALUE); dp[0] = 0; for (int i = 0; i < n; i++) { for (int j = 1; i + j * j <= n; j++) { dp[i + j * j] = Math.min(dp[i] + 1, dp[i + j * j]); } } return dp[n]; } }
from小土刀大佬,dp数组表示i对应的square数量。两层循环,内层dp[i + j * j]表示从i到 i + j * j究竟要不要加一,如果已经有更小的值就保持原状,否则在原基础上加一。
注意循环控制条件。