题目:
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9,
16, ...
) which sum to n.
For example, given n = 12
, return 3
because 12
= 4 + 4 + 4
; given n = 13
, return 2
because 13
= 4 + 9
.
class Solution {
//定义dp[i]。表示数i最少需要几个square number组成
//状态转移方程:dp[i] = min(dp[i-j*j]+1) for i-j*j>=0
public int numSquares(int n){
int[] dp = new int[n+1];
dp[0] = 0;
for(int i = 1; i <= n; i++){
int minV = Integer.MAX_VALUE;
int j = 1;
//依次挑选square number,可以重复挑选
while(i-j*j >= 0){
minV = Math.min(minV,dp[i-j*j]+1);
j++;
}
dp[i] = minV;
}
return dp[n];
}
}