1. 程式人生 > >LeetCode 279. 完全平方數(Perfect Squares)

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

-a 題目 col min lee 狀態 res style turn

題目描述

給定正整數 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 };

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