• [LintCode] Perfect Squares 完全平方数


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

    Example
    Given n = 12, return 3 because 12 = 4 + 4 + 4
    Given n = 13, return 2 because 13 = 4 + 9

    LeetCode上的原题,请参见我之前的博客Perfect Squares

    解法一:

    class Solution {
    public:
        /**
         * @param n a positive integer
         * @return an integer
         */
        int numSquares(int n) {
            while (n % 4 == 0) n /= 4;
            if (n % 8 == 7) return 4;
            for (int a = 0; a * a <= n; ++a) {
                int b = sqrt(n - a * a);
                if (a * a + b * b == n) {
                    return !!a + !!b;
                }
            }
            return 3;
        }
    };

    解法二:

    class Solution {
    public:
        /**
         * @param n a positive integer
         * @return an integer
         */
        int numSquares(int n) {
            while (n % 4 == 0) n /= 4;
            if (n % 8 == 7) return 4;
            vector<int> dp(n + 1, INT_MAX);
            dp[0] = 0;
            for (int i = 0; i < n; ++i) {
                for (int j = 1; i + j * j <= n; ++j) {
                    dp[i + j * j] = min(dp[i + j * j], dp[i] + 1);
                }
            }
            return dp.back();
        }
    };

    解法三:

    class Solution {
    public:
        /**
         * @param n a positive integer
         * @return an integer
         */
        int numSquares(int n) {
            while (n > 0 && n % 4 == 0) n /= 4;
            if (n % 8 == 7) return 4;
            int res = n, i = 2;
            while (i * i <= n) {
                int a = n / (i * i), b = n % (i * i);
                res = min(res, a + numSquares(b));
                ++i;
            }
            return res;
        }
    };
  • 相关阅读:
    工厂方法模式
    单例模式
    .NET平台下几种SOCKET模型的简要性能供参考
    easy ui 教程
    ACCESS数据库改名asp或asa
    库函数strcpy/strlen的工作方式
    opencv cvPreCornerDetect
    BlobTracker
    图像处理 Mine
    几种常见模式识别算法整理和总结
  • 原文地址:https://www.cnblogs.com/grandyang/p/5448521.html
Copyright © 2020-2023  润新知