mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 04:54:51 +08:00
Update 0343.整数拆分.md
Added python version code 有一行文本我觉得写重复了, 给删掉了
This commit is contained in:
@ -51,10 +51,6 @@ dp[i]的定义讲贯彻整个解题过程,下面哪一步想不懂了,就想
|
|||||||
|
|
||||||
**那有同学问了,j怎么就不拆分呢?**
|
**那有同学问了,j怎么就不拆分呢?**
|
||||||
|
|
||||||
j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了。
|
|
||||||
|
|
||||||
**那有同学问了,j怎么就不拆分呢?**
|
|
||||||
|
|
||||||
j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了。那么从1遍历j,比较(i - j) * j和dp[i - j] * j 取最大的。递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
|
j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了。那么从1遍历j,比较(i - j) * j和dp[i - j] * j 取最大的。递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
|
||||||
|
|
||||||
也可以这么理解,j * (i - j) 是单纯的把整数拆分为两个数相乘,而j * dp[i - j]是拆分成两个以及两个以上的个数相乘。
|
也可以这么理解,j * (i - j) 是单纯的把整数拆分为两个数相乘,而j * dp[i - j]是拆分成两个以及两个以上的个数相乘。
|
||||||
@ -213,8 +209,19 @@ class Solution {
|
|||||||
```
|
```
|
||||||
|
|
||||||
Python:
|
Python:
|
||||||
|
```python
|
||||||
|
class Solution:
|
||||||
|
def integerBreak(self, n: int) -> int:
|
||||||
|
dp = [0] * (n + 1)
|
||||||
|
dp[2] = 1
|
||||||
|
for i in range(3, n + 1):
|
||||||
|
# 假设对正整数 i 拆分出的第一个正整数是 j(1 <= j < i),则有以下两种方案:
|
||||||
|
# 1) 将 i 拆分成 j 和 i−j 的和,且 i−j 不再拆分成多个正整数,此时的乘积是 j * (i-j)
|
||||||
|
# 2) 将 i 拆分成 j 和 i−j 的和,且 i−j 继续拆分成多个正整数,此时的乘积是 j * dp[i-j]
|
||||||
|
for j in range(1, i):
|
||||||
|
dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]))
|
||||||
|
return dp[n]
|
||||||
|
```
|
||||||
Go:
|
Go:
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user