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 표시됨.
아직 활성 채용이 없습니다.