Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8651bdb

Browse files
committed
add 03
1 parent 161a9ad commit 8651bdb

File tree

1 file changed

+50
-0
lines changed
  • leetcode刷题/note/6月刷题

1 file changed

+50
-0
lines changed

‎leetcode刷题/note/6月刷题/03.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# No.837 新 21 点
2+
3+
爱丽丝参与一个大致基于纸牌游戏 "21 点" 规则的游戏,描述如下:
4+
5+
爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是整数。 每次抽取都是独立的,其结果具有相同的概率。
6+
7+
当爱丽丝获得不少于 K 分时,她就停止抽取数字。 爱丽丝的分数不超过 N 的概率是多少?
8+
9+
## 示例
10+
11+
```
12+
输入:N = 10, K = 1, W = 10
13+
输出:1.00000
14+
说明:爱丽丝得到一张卡,然后停止。
15+
-----
16+
输入:N = 6, K = 1, W = 10
17+
输出:0.60000
18+
说明:爱丽丝得到一张卡,然后停止。
19+
在 W = 10 的 6 种可能下,她的得分不超过 N = 6 分。
20+
-----
21+
输入:N = 21, K = 17, W = 10
22+
输出:0.73278
23+
```
24+
25+
## 解题思路
26+
27+
动态规划,和爬楼梯一个思路
28+
29+
```javascript
30+
var new21Game = function (N, K, W) {
31+
let dp = new Array(N + 1).fill(0)
32+
dp[0] = 1
33+
let windowSum = 0
34+
for (let i = 1; i < N + 1; i++) {
35+
if (i - W - 1 >= 0) { // 甩掉的dp[i - W - 1]要存在呀
36+
windowSum -= dp[i - W - 1] // 甩掉上一次window左端
37+
}
38+
if (i - 1 < K) { // 新纳入的dp[i - 1]要存在呀,分数i<=K,i-1<K
39+
windowSum += dp[i - 1]// 纳入上一次window的右侧一项
40+
}
41+
dp[i] = windowSum * (1 / W)
42+
}
43+
let res = 0
44+
for (let i = K; i <= N; i++) {
45+
res += dp[i]
46+
}
47+
return res
48+
};
49+
50+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /