mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
Merge pull request #664 from youngqqcn/master
增加0649_Dota2参议院的Java, Python, Go语言实现
This commit is contained in:
@ -10,6 +10,9 @@
|
||||
|
||||
# 649. Dota2 参议院
|
||||
|
||||
[力扣题目链接](https://leetcode-cn.com/problems/dota2-senate/)
|
||||
|
||||
|
||||
Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)
|
||||
|
||||
Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:
|
||||
@ -115,16 +118,102 @@ public:
|
||||
## Java
|
||||
|
||||
```java
|
||||
class Solution {
|
||||
public String predictPartyVictory(String senateStr) {
|
||||
// R = true表示本轮循环结束后,字符串里依然有R。D同理
|
||||
Boolean R = true, D = true;
|
||||
// 当flag大于0时,R在D前出现,R可以消灭D。当flag小于0时,D在R前出现,D可以消灭R
|
||||
int flag = 0;
|
||||
byte[] senate = senateStr.getBytes();
|
||||
while (R && D) { // 一旦R或者D为false,就结束循环,说明本轮结束后只剩下R或者D了
|
||||
R = false;
|
||||
D = false;
|
||||
for (int i = 0; i < senate.length; i++) {
|
||||
if (senate[i] == 'R') {
|
||||
if (flag < 0) senate[i] = 0; // 消灭R,R此时为false
|
||||
else R = true; // 如果没被消灭,本轮循环结束有R
|
||||
flag++;
|
||||
}
|
||||
if (senate[i] == 'D') {
|
||||
if (flag > 0) senate[i] = 0;
|
||||
else D = true;
|
||||
flag--;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 循环结束之后,R和D只能有一个为true
|
||||
return R == true ? "Radiant" : "Dire";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Python
|
||||
|
||||
```python
|
||||
class Solution:
|
||||
def predictPartyVictory(self, senate: str) -> str:
|
||||
# R = true表示本轮循环结束后,字符串里依然有R。D同理
|
||||
R , D = True, True
|
||||
|
||||
# 当flag大于0时,R在D前出现,R可以消灭D。当flag小于0时,D在R前出现,D可以消灭R
|
||||
flag = 0
|
||||
|
||||
senate = list(senate)
|
||||
while R and D: # 一旦R或者D为false,就结束循环,说明本轮结束后只剩下R或者D了
|
||||
R = False
|
||||
D = False
|
||||
for i in range(len(senate)) :
|
||||
if senate[i] == 'R' :
|
||||
if flag < 0: senate[i] = '0' # 消灭R,R此时为false
|
||||
else: R = True # 如果没被消灭,本轮循环结束有R
|
||||
flag += 1
|
||||
if senate[i] == 'D':
|
||||
if flag > 0: senate[i] = '0'
|
||||
else: D = True
|
||||
flag -= 1
|
||||
# 循环结束之后,R和D只能有一个为true
|
||||
return "Radiant" if R else "Dire"
|
||||
```
|
||||
|
||||
## Go
|
||||
|
||||
```go
|
||||
|
||||
func predictPartyVictory(senateStr string) string {
|
||||
// R = true表示本轮循环结束后,字符串里依然有R。D同理
|
||||
R, D := true, true
|
||||
// 当flag大于0时,R在D前出现,R可以消灭D。当flag小于0时,D在R前出现,D可以消灭R
|
||||
flag := 0
|
||||
|
||||
senate := []byte(senateStr)
|
||||
for R && D { // 一旦R或者D为false,就结束循环,说明本轮结束后只剩下R或者D了
|
||||
R = false
|
||||
D = false
|
||||
for i := 0; i < len(senate); i++ {
|
||||
if senate[i] == 'R' {
|
||||
if flag < 0 {
|
||||
senate[i] = 0 // 消灭R,R此时为false
|
||||
} else {
|
||||
R = true // 如果没被消灭,本轮循环结束有R
|
||||
}
|
||||
flag++;
|
||||
}
|
||||
if (senate[i] == 'D') {
|
||||
if flag > 0 {
|
||||
senate[i] = 0
|
||||
} else {
|
||||
D = true
|
||||
}
|
||||
flag--
|
||||
}
|
||||
}
|
||||
}
|
||||
// 循环结束之后,R和D只能有一个为true
|
||||
if R {
|
||||
return "Radiant"
|
||||
}
|
||||
return "Dire";
|
||||
}
|
||||
```
|
||||
|
||||
## JavaScript
|
||||
|
Reference in New Issue
Block a user