LeetCode 279. 完全平方數(Perfect Squares)


題目描述

 

給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。

示例 1:

輸入: n = 12
輸出: 3 
解釋: 12 = 4 + 4 + 4.

示例 2:

輸入: n = 13
輸出: 2
解釋: 13 = 4 + 9.

 

解題思路

 

利用動態規划思想解題,初始化dp數組令小於n的完全平方數為1,從1到n遍歷求解最小組成個數,再對每個數遍歷小於其的所有完全平方數,最小組成個數的狀態轉移方程為:

dp[i] = min(dp[i], dp[i - j * j] + 1)

 

代碼

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM