【LeetCode 279】Perfect Squares

题目描述:

给定一个数字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[i] = j 表示 i 由最少 j 个平方和组成。

代码:

class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n+1, INT_MAX);
        for (int i=1; i*i<=n; ++i) {
            dp[i*i] = 1;
        }
        for (int i=1; i<=n; ++i) {
            for (int j=1; j*j<i; ++j) {
                dp[i] = min(dp[i], dp[i-j*j] + 1);
            }
        }
        return dp[n];
    }
};

动态规划总是,想不到,一看就懂。菜是原罪。

猜你喜欢

转载自blog.csdn.net/iCode_girl/article/details/89763818