Skip to content

Commit 533c3a6

Browse files
committed
feat: add solutions to lc problem: No.1230.Toss Strange Coins
1 parent 16409ee commit 533c3a6

File tree

6 files changed

+210
-1
lines changed

6 files changed

+210
-1
lines changed

solution/1200-1299/1230.Toss Strange Coins/README.md

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,27 +35,106 @@
3535
<li>如果答案与标准答案的误差在&nbsp;<code>10^-5</code>&nbsp;内,则被视为正确答案。</li>
3636
</ul>
3737

38-
3938
## 解法
4039

4140
<!-- 这里可写通用的实现逻辑 -->
4241

42+
`0-1` 背包问题。
43+
4344
<!-- tabs:start -->
4445

4546
### **Python3**
4647

4748
<!-- 这里可写当前语言的特殊实现逻辑 -->
4849

4950
```python
51+
class Solution:
52+
def probabilityOfHeads(self, prob: List[float], target: int) -> float:
53+
m = len(prob)
54+
dp = [[0] * (target + 1) for _ in range(m + 1)]
55+
dp[0][0] = 1
56+
for i in range(1, m + 1):
57+
for j in range(target + 1):
58+
dp[i][j] = dp[i - 1][j] * (1 - prob[i - 1])
59+
if j >= 1:
60+
dp[i][j] += dp[i - 1][j - 1] * prob[i - 1]
61+
return dp[-1][-1]
62+
```
63+
64+
空间优化:
5065

66+
```python
67+
class Solution:
68+
def probabilityOfHeads(self, prob: List[float], target: int) -> float:
69+
dp = [0] * (target + 1)
70+
dp[0] = 1
71+
for v in prob:
72+
for j in range(target, -1, -1):
73+
dp[j] *= (1 - v)
74+
if j >= 1:
75+
dp[j] += dp[j - 1] * v
76+
return dp[-1]
5177
```
5278

5379
### **Java**
5480

5581
<!-- 这里可写当前语言的特殊实现逻辑 -->
5682

5783
```java
84+
class Solution {
85+
public double probabilityOfHeads(double[] prob, int target) {
86+
double[] dp = new double[target + 1];
87+
dp[0] = 1;
88+
for (double v : prob) {
89+
for (int j = target; j >= 0; --j) {
90+
dp[j] *= (1 - v);
91+
if (j >= 1) {
92+
dp[j] += dp[j - 1] * v;
93+
}
94+
}
95+
}
96+
return dp[target];
97+
}
98+
}
99+
```
100+
101+
### **C++**
102+
103+
```cpp
104+
class Solution {
105+
public:
106+
double probabilityOfHeads(vector<double>& prob, int target) {
107+
vector<double> dp(target + 1);
108+
dp[0] = 1;
109+
for (auto v : prob)
110+
{
111+
for (int j = target; j >= 0; --j)
112+
{
113+
dp[j] *= (1 - v);
114+
if (j >= 1) dp[j] += dp[j - 1] * v;
115+
}
116+
}
117+
return dp[target];
118+
}
119+
};
120+
```
58121
122+
### **Go**
123+
124+
```go
125+
func probabilityOfHeads(prob []float64, target int) float64 {
126+
dp := make([]float64, target+1)
127+
dp[0] = 1
128+
for _, v := range prob {
129+
for j := target; j >= 0; j-- {
130+
dp[j] *= (1 - v)
131+
if j >= 1 {
132+
dp[j] += dp[j-1] * v
133+
}
134+
}
135+
}
136+
return dp[target]
137+
}
59138
```
60139

61140
### **...**

solution/1200-1299/1230.Toss Strange Coins/README_EN.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,89 @@
3434
### **Python3**
3535

3636
```python
37+
class Solution:
38+
def probabilityOfHeads(self, prob: List[float], target: int) -> float:
39+
m = len(prob)
40+
dp = [[0] * (target + 1) for _ in range(m + 1)]
41+
dp[0][0] = 1
42+
for i in range(1, m + 1):
43+
for j in range(target + 1):
44+
dp[i][j] = dp[i - 1][j] * (1 - prob[i - 1])
45+
if j >= 1:
46+
dp[i][j] += dp[i - 1][j - 1] * prob[i - 1]
47+
return dp[-1][-1]
48+
```
3749

50+
```python
51+
class Solution:
52+
def probabilityOfHeads(self, prob: List[float], target: int) -> float:
53+
dp = [0] * (target + 1)
54+
dp[0] = 1
55+
for v in prob:
56+
for j in range(target, -1, -1):
57+
dp[j] *= (1 - v)
58+
if j >= 1:
59+
dp[j] += dp[j - 1] * v
60+
return dp[-1]
3861
```
3962

4063
### **Java**
4164

4265
```java
66+
class Solution {
67+
public double probabilityOfHeads(double[] prob, int target) {
68+
double[] dp = new double[target + 1];
69+
dp[0] = 1;
70+
for (double v : prob) {
71+
for (int j = target; j >= 0; --j) {
72+
dp[j] *= (1 - v);
73+
if (j >= 1) {
74+
dp[j] += dp[j - 1] * v;
75+
}
76+
}
77+
}
78+
return dp[target];
79+
}
80+
}
81+
```
82+
83+
### **C++**
84+
85+
```cpp
86+
class Solution {
87+
public:
88+
double probabilityOfHeads(vector<double>& prob, int target) {
89+
vector<double> dp(target + 1);
90+
dp[0] = 1;
91+
for (auto v : prob)
92+
{
93+
for (int j = target; j >= 0; --j)
94+
{
95+
dp[j] *= (1 - v);
96+
if (j >= 1) dp[j] += dp[j - 1] * v;
97+
}
98+
}
99+
return dp[target];
100+
}
101+
};
102+
```
43103
104+
### **Go**
105+
106+
```go
107+
func probabilityOfHeads(prob []float64, target int) float64 {
108+
dp := make([]float64, target+1)
109+
dp[0] = 1
110+
for _, v := range prob {
111+
for j := target; j >= 0; j-- {
112+
dp[j] *= (1 - v)
113+
if j >= 1 {
114+
dp[j] += dp[j-1] * v
115+
}
116+
}
117+
}
118+
return dp[target]
119+
}
44120
```
45121

46122
### **...**
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
double probabilityOfHeads(vector<double>& prob, int target) {
4+
vector<double> dp(target + 1);
5+
dp[0] = 1;
6+
for (auto v : prob)
7+
{
8+
for (int j = target; j >= 0; --j)
9+
{
10+
dp[j] *= (1 - v);
11+
if (j >= 1) dp[j] += dp[j - 1] * v;
12+
}
13+
}
14+
return dp[target];
15+
}
16+
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
func probabilityOfHeads(prob []float64, target int) float64 {
2+
dp := make([]float64, target+1)
3+
dp[0] = 1
4+
for _, v := range prob {
5+
for j := target; j >= 0; j-- {
6+
dp[j] *= (1 - v)
7+
if j >= 1 {
8+
dp[j] += dp[j-1] * v
9+
}
10+
}
11+
}
12+
return dp[target]
13+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public double probabilityOfHeads(double[] prob, int target) {
3+
double[] dp = new double[target + 1];
4+
dp[0] = 1;
5+
for (double v : prob) {
6+
for (int j = target; j >= 0; --j) {
7+
dp[j] *= (1 - v);
8+
if (j >= 1) {
9+
dp[j] += dp[j - 1] * v;
10+
}
11+
}
12+
}
13+
return dp[target];
14+
}
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def probabilityOfHeads(self, prob: List[float], target: int) -> float:
3+
dp = [0] * (target + 1)
4+
dp[0] = 1
5+
for v in prob:
6+
for j in range(target, -1, -1):
7+
dp[j] *= (1 - v)
8+
if j >= 1:
9+
dp[j] += dp[j - 1] * v
10+
return dp[-1]

0 commit comments

Comments
 (0)