《LeetCode之每日一题》:57.完全平方数

Posted 是七喜呀!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《LeetCode之每日一题》:57.完全平方数相关的知识,希望对你有一定的参考价值。

完全平方数


题目链接: 完全平方数

有关题目

题解

法一:动态规划
在这里插入图片描述

class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n + 1);//dp[i]表示最少需要多少个数的平方来表示整数i
        for (int i = 1; i <= n; i++)
        {
            int minn = INT_MAX;
            for (int j = 1; j * j <= i; j++)
            {
                minn = min(minn,dp[i - j * j]);//动态转移方程
            }
            dp[i] = minn + 1;
        }
        return dp[n];
    }
};

在这里插入图片描述
法二:数学
参考官方题解

思路:
数学中有一个四平方和定理,即任意一个正整数最多能够被写成四个正整数的平方和

在这里插入图片描述

class Solution {
public:
    // 判断是否为完全平方数
    bool isPerfectSquare(int n)
    {
        int x = (int)sqrt(n);
        return x * x == n;
    }

    // 判断是否能表示为 4^k*(8m+7)
    bool checkAnswer4(int n)
    {
        while(n % 4 == 0)
        {
            n /= 4;
        }
        return n % 8 == 7;
    }
    int numSquares(int n) {
        if(isPerfectSquare(n))
            return 1;
        if(checkAnswer4(n))
            return 4;
        for (int i = 1; i * i <= n; i++)
        {
            int j = n - i * i;
            if (isPerfectSquare(j))
                return 2;
        }
        return 3;
    }
};

在这里插入图片描述

以上是关于《LeetCode之每日一题》:57.完全平方数的主要内容,如果未能解决你的问题,请参考以下文章

《LeetCode之每日一题》:29.平方数之和

《LeetCode之每日一题》:145.x 的平方根

题解报告Leecode367. 有效的完全平方数——Leecode每日一题系列

《LeetCode之每日一题》:269.快乐数

4.11 每日一题题解

LeetCode 279. 完全平方数 / 牛客:多多的数字组合 / 多多的字符变换