Skip to content

Commit 1793c16

Browse files
authored
Create new-21-game.py
1 parent 1314005 commit 1793c16

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

new-21-game.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution:
2+
"""
3+
@param n: int
4+
@param k: int
5+
@param w: int
6+
@return: the probability
7+
"""
8+
def new21_game(self, n: int, k: int, w: int) -> float:
9+
# Write your code here.
10+
'''
11+
使用DP,dpi表示当前值为i的概率。每次可选牌的范围是1到w,所以如果当前值为i,
12+
那么上一次的取值范围为i - w到i - 1。
13+
我们要求的结果是大于k的数,所以最终i的范围落在k到k + w - 1。如果n >= k + w,
14+
那么就跟就说100%.如果n < k + w,那么累加概率值即可。
15+
'''
16+
if (k == 0) or (n >= (k + w)):
17+
return 1
18+
r = 0
19+
s = 0
20+
dp = [0] * (n + 1) # [0, n]
21+
for i in range(1, n + 1):
22+
dp[i] = (s / w + 1 / w) if (i <= w) else (s / w)
23+
if i < k:
24+
s += dp[i]
25+
if i > w:
26+
s -= dp[i - w]
27+
if i >= k:
28+
r += dp[i]
29+
return r
30+
31+
# medium: https://www.lintcode.com/problem/1432

0 commit comments

Comments
 (0)