Leetcode 279. 完全平方数 c++

链接:
https://leetcode-cn.com/problems/perfect-squares/

解题思路:
这个题用动态规划做的,时间比其它方法长。

class Solution {
public:
    int numSquares(int n)
    {
        int maxNum = static_cast<int>(sqrt(n) + 0.000001);
        vector<int> square(maxNum + 1);
        for (size_t i = 0; i <= maxNum; i++) {
            square[i] = i * i;
        }
        vector<int> dp;
        dp.assign(n + 1, 0);
        for (int i = static_cast<int>(square.size()) - 1; i > 0; i--) {
            dp[square[i]] = 1;
            int maxCheck = n - square[i];
            for (int j = 0; j <= maxCheck; j++) {
                if (dp[j]) {
                    if (!dp[j + square[i]]) {
                        dp[j + square[i]] = dp[j] + 1;
                    } else {
                        dp[j + square[i]] = min(dp[j] + 1, dp[j + square[i]]);
                    }
                }
            }
        }
        return dp[n];
    }
};

看一下别人的思路,这应该是个数学定理。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。