mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-31 02:53:42 +00:00
Update 60. n 个骰子的点数.md
补充动态规划解法的状态转移与概率计算说明;调整滚动数组小节标题、空间优化说明及相关代码注释。
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
|
||||
### 动态规划
|
||||
|
||||
使用一个二维数组 dp 存储点数出现的次数,其中 dp\[i]\[j] 表示前 i 个骰子产生点数 j 的次数。
|
||||
使用一个二维数组 dp 存储点数出现的次数,其中 dp\[i]\[j] 表示前 i 个骰子产生点数 j 的次数。第 i 个骰子掷出 k(1~6)时,前 i - 1 个骰子的点数和要为 j - k,因此 dp\[i]\[j] 等于 dp\[i - 1]\[j - k] 对 k = 1~6 求和,最后除以 6<sup>n</sup> 得到概率。
|
||||
|
||||
<div align="center"> <img src="pics/offer-dice-sum.png" width="560px"/> </div><br>
|
||||
|
||||
@@ -41,9 +41,9 @@ public double[] statisticsProbability(int num) {
|
||||
}
|
||||
```
|
||||
|
||||
### 动态规划 + 旋转数组
|
||||
### 动态规划 + 滚动数组
|
||||
|
||||
空间复杂度:O(N)
|
||||
第 i 行只依赖第 i - 1 行,用两行交替使用即可。空间复杂度:O(N)
|
||||
|
||||
```java
|
||||
public double[] statisticsProbability(int num) {
|
||||
@@ -54,10 +54,10 @@ public double[] statisticsProbability(int num) {
|
||||
for (int i = 1; i <= face; i++)
|
||||
dp[0][i] = 1;
|
||||
|
||||
int flag = 1; /* 旋转标记 */
|
||||
int flag = 1; /* 当前行 */
|
||||
for (int i = 2; i <= num; i++, flag = 1 - flag) {
|
||||
for (int j = 0; j <= pointNum; j++)
|
||||
dp[flag][j] = 0; /* 旋转数组清零 */
|
||||
dp[flag][j] = 0; /* 当前行清零 */
|
||||
|
||||
for (int j = i; j <= pointNum; j++)
|
||||
for (int k = 1; k <= face && k <= j; k++)
|
||||
|
||||
Reference in New Issue
Block a user