Perfect Squares

来源:互联网 发布:java管理系统界面 编辑:程序博客网 时间:2024/06/05 16:43

Description
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.
解题思路:这道题可以用数学的方法来解决。首先我们要知道两个定理:第一,四平方和定理,每个正整数均可表示为4个整数的平方和;第二,三平方和定理,一个自然数能表示为三个数的平方和当且仅当它不能表示为4^k * (8 * m + 7),对于某个整数k和m。第二个定理启发我们当一个数能表示为4^k * (8 * m + 7),对于某个整数k和m成立时,它就能表示为4个数的平方和。因此,我们就知道了,一个数最多表示为4个数的平方和,所以只要分4种情况讨论即可。程序代码如下:

class Solution {public:    int numSquares(int n) {        int i = sqrt(n);        if (i * i == n)             return 1;        for (int j = 0; j * j <= n; j++) {            int l = sqrt(n - j * j);            if (l * l + j * j == n)                return 2;        }        int k = 0;        while (true) {         //n是否等于4^k*(8*m+7)            int a = pow(4, k);            if (a > n)                break;            if (n % a == 0) {                if ((n / a - 7) % 8 == 0 )                    return 4;            }            k++;        }        return 3;    }};
0 0
原创粉丝点击