zoukankan      html  css  js  c++  java
  • [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;
        }
    };
  • 相关阅读:
    webDriver检索table数据
    C# 遍历枚举
    Java——Iterate through a HashMap
    Java——Read/convert an InputStream to a String
    简单的异步HTTP服务端和客户端
    授信主体查找
    mysql 事务测试
    mysql 替换
    如何查看由EF生成的SQL?
    C# 如何用多字符分割字符串
  • 原文地址:https://www.cnblogs.com/grandyang/p/5448521.html
Copyright © 2011-2022 走看看