diff --git a/notes/60. n 个骰子的点数.md b/notes/60. n 个骰子的点数.md
index 5e525cd3..713fbf4a 100644
--- a/notes/60. n 个骰子的点数.md
+++ b/notes/60. n 个骰子的点数.md
@@ -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 求和,最后除以 6n 得到概率。
@@ -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++)