leetcde 279 完全平方数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/artisans/article/details/89007952
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

示例 1:

输入: n = 12
输出: 3 
解释: 12 = 4 + 4 + 4.
示例 2:

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

class Solution {
public:
	int numSquares(int n) {

		const int VALUE = INT_MAX - 100;
		vector<int> dp(n+1, VALUE);
		dp[0] = 1;
		dp[1] = 1;

		int pre = 1, delta = 3;
		for (int i = 2; i <= n; i++)
		{
			if(i == pre + delta)
			{
				dp[i] = 1; 
				pre = i;
				delta += 2;
			}
			else
			{
				int minV = VALUE;
				int PRE = 0, DELTA = 1;
				for (int k = i -1; k >= 1; k--)
				{		
					int var = (i - k);
					if (var == PRE + DELTA)
					{
						minV = std::min(minV, dp[k]);
						DELTA += 2;
						PRE = var;
						//cout << var << endl;
					}
				}
				dp[i] = minV + 1;
			}
		}

		return dp.back();
	}
};

猜你喜欢

转载自blog.csdn.net/artisans/article/details/89007952