Merge pull request #1712 from c0dedance/patch-1

Update 0343.整数拆分.md
This commit is contained in:
程序员Carl
2022-11-04 17:22:20 +08:00
committed by GitHub

View File

@ -89,7 +89,7 @@ dp[i] 是依靠 dp[i - j]的状态所以遍历i一定是从前向后遍历
所以遍历顺序为: 所以遍历顺序为:
``` ```
for (int i = 3; i <= n ; i++) { for (int i = 3; i <= n ; i++) {
for (int j = 1; j < i - 1; j++) { for (int j = 1; j <= i / 2; j++) {
dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j)); dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
} }
} }
@ -110,7 +110,7 @@ public:
vector<int> dp(n + 1); vector<int> dp(n + 1);
dp[2] = 1; dp[2] = 1;
for (int i = 3; i <= n ; i++) { for (int i = 3; i <= n ; i++) {
for (int j = 1; j < i - 1; j++) { for (int j = 1; j <= i / 2; j++) {
dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j)); dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
} }
} }
@ -167,7 +167,7 @@ public:
dp[2] = 2; dp[2] = 2;
dp[3] = 3; dp[3] = 3;
for (int i = 4; i <= n ; i++) { for (int i = 4; i <= n ; i++) {
for (int j = 1; j < i - 1; j++) { for (int j = 1; j <= i / 2; j++) {
dp[i] = max(dp[i], dp[i - j] * dp[j]); dp[i] = max(dp[i], dp[i - j] * dp[j]);
} }
} }
@ -224,7 +224,7 @@ class Solution:
# 假设对正整数 i 拆分出的第一个正整数是 j1 <= j < i则有以下两种方案 # 假设对正整数 i 拆分出的第一个正整数是 j1 <= j < i则有以下两种方案
# 1) 将 i 拆分成 j 和 ij 的和,且 ij 不再拆分成多个正整数,此时的乘积是 j * (i-j) # 1) 将 i 拆分成 j 和 ij 的和,且 ij 不再拆分成多个正整数,此时的乘积是 j * (i-j)
# 2) 将 i 拆分成 j 和 ij 的和,且 ij 继续拆分成多个正整数,此时的乘积是 j * dp[i-j] # 2) 将 i 拆分成 j 和 ij 的和,且 ij 继续拆分成多个正整数,此时的乘积是 j * dp[i-j]
for j in range(1, i - 1): for j in range(1, i / 2 + 1):
dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j])) dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]))
return dp[n] return dp[n]
``` ```
@ -281,7 +281,7 @@ var integerBreak = function(n) {
dp[2] = 1 dp[2] = 1
for(let i = 3; i <= n; i++) { for(let i = 3; i <= n; i++) {
for(let j = 1; j < i; j++) { for(let j = 1; j <= i / 2; j++) {
dp[i] = Math.max(dp[i], dp[i - j] * j, (i - j) * j) dp[i] = Math.max(dp[i], dp[i - j] * j, (i - j) * j)
} }
} }
@ -306,7 +306,7 @@ function integerBreak(n: number): number {
const dp: number[] = new Array(n + 1).fill(0); const dp: number[] = new Array(n + 1).fill(0);
dp[2] = 1; dp[2] = 1;
for (let i = 3; i <= n; i++) { for (let i = 3; i <= n; i++) {
for (let j = 1; j <= i - 2; j++) { for (let j = 1; j <= i / 2; j++) {
dp[i] = Math.max(dp[i], j * dp[i - j], j * (i - j)); dp[i] = Math.max(dp[i], j * dp[i - j], j * (i - j));
} }
} }