343. Integer Break

Văn bản bài toán được dịch từ tiếng Nga theo ngôn ngữ giao diện. Mã không thay đổi.

given số nguyên n. return true, если оно является степенью числа четыре. В противном случае return false.

số nguyên n является степенью числа четыре, если существует số nguyên x такое, что n == 4^x.

Ví dụ

Input: n = 2

Output: 1

Explanation: 2 = 1 + 1, 1 × 1 = 1.

C# lời giải

đã khớp/gốc
public class Solution {
    public int IntegerBreak(int n) {
        if (n <= 1) return 0;
        
        int[] dp = new int[n + 1];
        
        for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= i / 2; j++) {
                dp[i] = Math.Max(dp[i], Math.Max(j * (i - j), j * dp[i - j]));
            }
        }
        
        return dp[n];
    }
}

C++ lời giải

bản nháp tự động, xem lại trước khi gửi
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int IntegerBreak(int n) {
        if (n <= 1) return 0;
        
        vector<int>& dp = new int[n + 1];
        
        for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= i / 2; j++) {
                dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]));
            }
        }
        
        return dp[n];
    }
}

Java lời giải

bản nháp tự động, xem lại trước khi gửi
import java.util.*;
import java.math.*;

// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
    public int IntegerBreak(int n) {
        if (n <= 1) return 0;
        
        int[] dp = new int[n + 1];
        
        for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= i / 2; j++) {
                dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));
            }
        }
        
        return dp[n];
    }
}

JavaScript lời giải

đã khớp/gốc
var integerBreak = function(n) {
    if (n <= 1) return 0;
    
    let dp = new Array(n + 1).fill(0);
    
    for (let i = 2; i <= n; i++) {
        for (let j = 1; j <= Math.floor(i / 2); j++) {
            dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));
        }
    }
    
    return dp[n];
};

Algorithm

Инициализация и базовый случай:

Создайте mảng dp длиной n + 1, где dp[i] будет хранить максимальное произведение для числа i. Инициализируйте mảng нулями.

Вычисление максимального произведения:

Для каждого числа i от 2 до n:

Для каждого числа j от 1 до i // 2:

Обновите dp[i] как максимальное значение между текущим dp[i], произведением j и i - j, и произведением j и dp[i - j].

Возврат результата:

return значение dp[n], которое будет максимальным произведением для числа n.

😎

Vacancies for this task

việc làm đang hoạt động with overlapping task tags are đã hiển thị.

Tất cả việc làm
Chưa có việc làm đang hoạt động.