完全平方数

Category Difficulty Likes Dislikes
algorithms Medium (64.01%) 1253 -

Tags Companies 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,14916 都是完全平方数,而 311 不是。

示例 1:

输入:n = 12
输出:3 
解释:12 = 4 + 4 + 4

示例 2:

输入:n = 13
输出:2
解释:13 = 4 + 9

提示:

  • 1 <= n <= 104

题解:

class Solution {
public:
     //最少数量,dp[i]的意义是组成和为i的最少完全平方数个数
     //更新dp[j]=min(dp[j],dp[j-nums[i]])
    int numSquares(int n) {
        vector<int>dp(n+1,INT32_MAX);
        dp[0]=0;

        for (int i = 0; i <= n; i++) { // 遍历背包
            for (int j = 1; j*j <=i; j++) { // 遍历物品
               dp[i] = min(dp[i - j*j] + 1, dp[i]);
            }
        }
        return dp[n];
    }
};