题目

        给定正整数 n,找到若干个完全平方数(比如:1、4、9、16、...),使得它们的和等于n。你需要让组成和的完全平方数的个数最少。

        示例1:

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

        示例2:

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

C++面试宝典第27题:完全平方数之和-LMLPHP

解析

        这道题主要考察应聘者对于动态规划算法的理解和掌握程度,还是有一定难度的。

        对于较小的数,这道题可以使用“暴力法”来尝试所有可能的组合。但在n较大时,“暴力法”的效率极其低下,因为它会重复检查许多无效的组合。另外,随着n的增大,其时间复杂度会呈指数级增长。“暴力法”的具体实现,可参考下面的示例代码。

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

bool IsPerfectSquare(int nNumber)
{
    int nTemp = (int)s
02-09 11:46