We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 1314005 commit 1793c16Copy full SHA for 1793c16
new-21-game.py
@@ -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