返回介绍

solution / 0500-0599 / 0544.Output Contest Matches / README

发布于 2024-06-17 01:03:59 字数 3107 浏览 0 评论 0 收藏 0

544. 输出比赛匹配对

English Version

题目描述

 

在 NBA 季后赛期间,我们总是安排相对强大的球队与相对弱小的球队比赛,就像让排名第 1 的球队与排名第 n 的球队比赛一样,这是一种使比赛更加有趣的好策略。

现给定 n 支球队,请以字符串的形式返回它们的最终的比赛匹配方案。

n 支球队从 1n 进行标记,代表它们的初始排名(即,排名 1 的是最强的球队,排名 n 的是最弱的球队)。

我们将使用括号 '('')' 以及逗号 ',' 来表示比赛的匹配情况。我们使用括号来表示匹配,逗号来表示分组。在每一轮的匹配过程中,你总是需要遵循使相对强大的球队与相对弱小的球队配对的策略。

 

示例 1:

输入: n = 4
输出: "((1,4),(2,3))"
解释: 
在第一轮,我们将队伍 1 和 4 配对,2 和 3 配对,以满足将强队和弱队搭配的效果。得到(1,4),(2,3).
在第二轮,(1,4) 和 (2,3) 的赢家需要进行比赛以确定最终赢家,因此需要再在外面加一层括号。
于是最终答案是((1,4),(2,3))。

示例 2:

输入: n = 8
输出: "(((1,8),(4,5)),((2,7),(3,6)))"
解释: 
第一轮: (1,8),(2,7),(3,6),(4,5)
第二轮: ((1,8),(4,5)),((2,7),(3,6))
第三轮 (((1,8),(4,5)),((2,7),(3,6)))
由于第三轮会决出最终胜者,故输出答案为(((1,8),(4,5)),((2,7),(3,6)))。

 

提示:

  • n == 2x,并且 x 在范围 [1,12] 内。

解法

方法一:模拟

假设 team[i] 为当前轮次中第 i 强的队伍。

每一轮,将第 i 支队伍变成 "(" + team[i] + "," + team[n-1-i] + ")",并且每一轮淘汰一半的队伍。

class Solution:
  def findContestMatch(self, n: int) -> str:
    team = [str(i + 1) for i in range(n)]
    while n > 1:
      for i in range(n >> 1):
        team[i] = f'({team[i]},{team[n - 1 - i]})'
      n >>= 1
    return team[0]
class Solution {
  public String findContestMatch(int n) {
    String[] team = new String[n];
    for (int i = 0; i < n; ++i) {
      team[i] = "" + (i + 1);
    }
    for (; n > 1; n /= 2) {
      for (int i = 0; i < n / 2; ++i) {
        team[i] = "(" + team[i] + "," + team[n - 1 - i] + ")";
      }
    }
    return team[0];
  }
}
class Solution {
public:
  string findContestMatch(int n) {
    vector<string> team(n);
    for (int i = 0; i < n; ++i) team[i] = to_string(i + 1);
    for (; n > 1; n >>= 1) {
      for (int i = 0; i < n >> 1; ++i) {
        team[i] = "(" + team[i] + "," + team[n - 1 - i] + ")";
      }
    }
    return team[0];
  }
};
func findContestMatch(n int) string {
  team := make([]string, n)
  for i := range team {
    team[i] = strconv.Itoa(i + 1)
  }
  for n > 1 {
    for i := 0; i < n>>1; i++ {
      team[i] = "(" + team[i] + "," + team[n-1-i] + ")"
    }
    n >>= 1
  }
  return team[0]
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文