343. Integer Break

Der Aufgabentext wird für die gewählte Sprache aus dem Russischen übersetzt. Code bleibt unverändert.

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

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

Beispiel

Input: n = 2

Output: 1

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

C# Lösung

zugeordnet/original
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ösung

Auto-Entwurf, vor dem Einreichen prüfen
#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ösung

Auto-Entwurf, vor dem Einreichen prüfen
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ösung

zugeordnet/original
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

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

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

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

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

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

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

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

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

😎

Stellen zu dieser Aufgabe

aktive Stellen with overlapping task tags are angezeigt.

Alle Stellen
Es gibt noch keine aktiven Stellen.