1. 程式人生 > 其它 >安裝火狐瀏覽器報錯找不到VCRUNTIME140_1.DLL

安裝火狐瀏覽器報錯找不到VCRUNTIME140_1.DLL

給定正整數n,找到若干個完全平方數(比如1, 4, 9, 16, ...)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。

給你一個整數 n ,返回和為 n 的完全平方數的 最少數量 。

完全平方數 是一個整數,其值等於另一個整數的平方;換句話說,其值等於一個整數自乘的積。例如,1、4、9 和 16 都是完全平方數,而 3 和 11 不是。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/perfect-squares
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

動態規劃

class Solution {
    public int numSquares(int n) {
        int[] dp = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            dp[i] = Integer.MAX_VALUE;
            for (int j = 1; j * j <= i; j++) {
                dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
            }
        }
        return dp[n];
    }
}

數學

class Solution {
    public 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;
    }

    // 判斷是否為完全平方數
    public boolean isPerfectSquare(int x) {
        int y = (int) Math.sqrt(x + 0.5);
        return y * y == x;
    }

    // 判斷是否能表示為 4^k*(8m+7)
    public boolean checkAnswer4(int x) {
        while (x % 4 == 0) {
            x /= 4;
        }
        return x % 8 == 7;
    }
}
心之所向,素履以往 生如逆旅,一葦以航