343. Integer Break
LeetCode
medium
original: C#
#array
#backtracking
#csharp
#dynamic-programming
#leetcode
#math
#medium
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。
given 整数 n. return true, если оно является степенью числа четыре. В противном случае return false.
整数 n является степенью числа четыре, если существует 整数 x такое, что n == 4^x.
例
Input: n = 2
Output: 1
Explanation: 2 = 1 + 1, 1 × 1 = 1.
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++ 解法
自動ドラフト、提出前に確認#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 解法
自動ドラフト、提出前に確認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 解法
照合済み/オリジナル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
Инициализация и базовый случай:
Создайте 配列 dp длиной n + 1, где dp[i] будет хранить максимальное произведение для числа i. Инициализируйте 配列 нулями.
Вычисление максимального произведения:
Для каждого числа 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
有効な求人 with overlapping task tags are 表示.
有効な求人はまだありません。