LeetCode

来源:互联网 发布:linux cp怎么用 编辑:程序博客网 时间:2024/05/18 13:29

Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.

For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.


给你一个数,问最少能用多少个完全平方数组成。最少。

动态规划美滋滋啊。

dp[0] = 0 dp[1] = dp[0]+1 = 1dp[2] = dp[1]+1 = 2dp[3] = dp[2]+1 = 3dp[4] = Min{ dp[4-1*1]+1, dp[4-2*2]+1 }       = Min{ dp[3]+1, dp[0]+1 }       = 1dp[5] = Min{ dp[5-1*1]+1, dp[5-2*2]+1 }       = Min{ dp[4]+1, dp[1]+1 }       = 2
所以,dp[n] = min{ dp[n - i * i] + 1 }, n - i * i >= 0 && i >= 1

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


原创粉丝点击