From 9604cbfe435e6449b7a7c33514dce92b7b2882ff Mon Sep 17 00:00:00 2001 From: yqq Date: Thu, 26 Aug 2021 17:44:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A00649=5FDota2=E5=8F=82?= =?UTF-8?q?=E8=AE=AE=E9=99=A2=E7=9A=84Java,=20Python,=20Go=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0649.Dota2参议院.md | 89 +++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/problems/0649.Dota2参议院.md b/problems/0649.Dota2参议院.md index 9cec7401..e2900824 100644 --- a/problems/0649.Dota2参议院.md +++ b/problems/0649.Dota2参议院.md @@ -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