279. Perfect Squares(动态规划)

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.




dp[0] = 0
dp[1] = dp[0]+1 = 1
dp[2] = dp[1]+1 = 2
dp[3] = dp[2]+1 = 3
dp[4] = Min{ dp[4-1*1]+1, dp[4-2*2]+1 } = Min{ dp[3]+1, dp[0]+1 } = 1
dp[5] = Min{ dp[5-1*1]+1, dp[5-2*2]+1 } = Min{ dp[4]+1, dp[1]+1 } = 2
.
.
.
dp[13] = Min{ dp[13-1*1]+1, dp[13-2*2]+1, dp[13-3*3]+1 } = Min{ dp[12]+1, dp[9]+1, dp[4]+1 } = 2
.
.
.
dp[n] = Min{ dp[n - i*i] + 1 }, n - i*i >=0 && i >= 1



 1 class Solution {
 2 public:
 3     int numSquares(int n) {
 4         vector<int> dp(n+1,0);
 5         for(int i = 1;i<=n;i++){
 6             
 7             int mins = INT_MAX;
 8             for(int j = 1;i-j*j>=0;j++){
 9                 mins = min(mins,dp[i-j*j]+1);
10             }
11             dp[i] = mins;
12         }
13         return dp[n];
14     }
15 };

 

 
posted @ 2019-02-27 22:39  乐乐章  阅读(238)  评论(0编辑  收藏  举报