update 0343.整数拆分: 优化文本,优化代码风格

This commit is contained in:
Yuhao Ju
2022-12-19 23:54:23 +08:00
committed by GitHub
parent 889f6724f7
commit d7c69811ed

View File

@ -35,7 +35,7 @@
dp[i]分拆数字i可以得到的最大乘积为dp[i]。 dp[i]分拆数字i可以得到的最大乘积为dp[i]。
dp[i]的定义贯彻整个解题过程下面哪一步想不懂了就想想dp[i]究竟表示的是啥! dp[i]的定义贯彻整个解题过程下面哪一步想不懂了就想想dp[i]究竟表示的是啥!
2. 确定递推公式 2. 确定递推公式
@ -93,7 +93,7 @@ for (int i = 3; i <= n ; i++) {
} }
} }
``` ```
注意 枚举j的时候是从1开始的。从0开始的话那么让拆分一个数拆个0的话,那么求最大乘积没有意义了。 注意 枚举j的时候是从1开始的。从0开始的话那么让拆分一个数拆个0求最大乘积没有意义了。
j的结束条件是 j < i - 1 其实 j < i 也是可以的不过可以节省一步例如让j = i - 1的话其实在 j = 1的时候这一步就已经拆出来了重复计算所以 j < i - 1 j的结束条件是 j < i - 1 其实 j < i 也是可以的不过可以节省一步例如让j = i - 1的话其实在 j = 1的时候这一步就已经拆出来了重复计算所以 j < i - 1
@ -109,15 +109,15 @@ for (int i = 3; i <= n ; i++) {
} }
``` ```
因为拆分一个数n 使之乘积最大那么一定是拆分m个近似相同的子数相乘才是最大的 因为拆分一个数n 使之乘积最大那么一定是拆分m个近似相同的子数相乘才是最大的
例如 6 拆成 3 * 3 10 拆成 3 * 3 * 4 100的话 也是拆成m个近似数组的子数 相乘才是最大的 例如 6 拆成 3 * 3 10 拆成 3 * 3 * 4 100的话 也是拆成m个近似数组的子数 相乘才是最大的
只不过我们不知道m究竟是多少而已但可以明确的是m一定大于等于2既然m大于等于也就是 最差也应该是拆成两个相同的 可能是最大值 只不过我们不知道m究竟是多少而已但可以明确的是m一定大于等于2既然m大于等于2也就是 最差也应该是拆成两个相同的 可能是最大值
那么 j 遍历只需要遍历到 n/2 就可以后面就没有必要遍历了一定不是最大值 那么 j 遍历只需要遍历到 n/2 就可以后面就没有必要遍历了一定不是最大值
至于 拆分一个数n 使之乘积最大那么一定是拆分m个近似相同的子数相乘才是最大的 这个我就不去做数学证明了感兴趣的同学可以自己证明 至于 拆分一个数n 使之乘积最大那么一定是拆分m个近似相同的子数相乘才是最大的 这个我就不去做数学证明了感兴趣的同学可以自己证明
5. 举例推导dp数组 5. 举例推导dp数组
@ -254,7 +254,7 @@ class Solution:
``` ```
### Go ### Go
```golang ```go
func integerBreak(n int) int { func integerBreak(n int) int {
/** /**
动态五部曲 动态五部曲
@ -283,21 +283,6 @@ func max(a,b int) int{
} }
``` ```
### Rust
```rust
pub fn integer_break(n: i32) -> i32 {
let n = n as usize;
let mut dp = vec![0; n + 1];
dp[2] = 1;
for i in 3..=n {
for j in 1..i-1 {
dp[i] = dp[i].max((i - j) * j).max(dp[i - j] * j);
}
}
dp[n] as i32
}
```
### Javascript ### Javascript
```Javascript ```Javascript
var integerBreak = function(n) { var integerBreak = function(n) {
@ -313,6 +298,21 @@ var integerBreak = function(n) {
}; };
``` ```
### Rust
```rust
pub fn integer_break(n: i32) -> i32 {
let n = n as usize;
let mut dp = vec![0; n + 1];
dp[2] = 1;
for i in 3..=n {
for j in 1..i-1 {
dp[i] = dp[i].max((i - j) * j).max(dp[i - j] * j);
}
}
dp[n] as i32
}
```
### TypeScript ### TypeScript
```typescript ```typescript