During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, like make the rank 1 team play with the rank nth team, which is a good strategy to make the contest more interesting. Now, you're given n teams, you need to output their final contest matches in the form of a string.

The n teams are given in the form of positive integers from 1 to n, which represents their initial rank. (Rank 1 is the strongest team and Rank n is the weakest team.) We'll use parentheses('(', ')') and commas(',') to represent the contest team pairing - parentheses('(' , ')') for pairing and commas(',') for partition. During the pairing process in each round, you always need to follow the strategy of making the rather strong one pair with the rather weak one.

Example 1:

Input: 2
Output: (1,2)
Explanation:
Initially, we have the team 1 and the team 2, placed like: 1,2.
Then we pair the team (1,2) together with '(', ')' and ',', which is the final answer.

Example 2:

Input: 4
Output: ((1,4),(2,3))
Explanation:
In the first round, we pair the team 1 and 4, the team 2 and 3 together, as we need to make the strong team and weak team together.
And we got (1,4),(2,3).
In the second round, the winners of (1,4) and (2,3) need to play again to generate the final winner, so you need to add the paratheses outside them.
And we got the final answer ((1,4),(2,3)).

Example 3:

Input: 8
Output: (((1,8),(4,5)),((2,7),(3,6)))
Explanation:
First round: (1,8),(2,7),(3,6),(4,5)
Second round: ((1,8),(4,5)),((2,7),(3,6))
Third round: (((1,8),(4,5)),((2,7),(3,6)))
Since the third round will generate the final winner, you need to output the answer (((1,8),(4,5)),((2,7),(3,6))). 

Note:

  1. The n is in range [2, 212].
  2. We ensure that the input n can be converted into the form 2k, where k is a positive integer.

有n只队伍(n的范围[2, 212], 正偶数),编号为1 ~ n,队伍按照最强和最弱的分在一组的原则分组比赛,给出一直到最后一轮比赛的分组方法。

解法1:迭代iterative,

解法2:递归recursive,

Java:

public String findContestMatch(int n) {
List<String> matches = new ArrayList<>();
for(int i = 1; i <= n; i++) matches.add(String.valueOf(i)); while(matches.size() != 1){
List<String> newRound = new ArrayList<>();
for(int i = 0; i < matches.size()/2; i++)
newRound.add("(" + matches.get(i) + "," + matches.get(matches.size() - i - 1) + ")");
matches = newRound;
}
return matches.get(0);
}

Java:

 public String findContestMatch(int n) {
String[] m = new String[n];
for (int i = 0; i < n; i++) {
m[i] = String.valueOf(i + 1);
} while (n > 1) {
for (int i = 0; i < n / 2; i++) {
m[i] = "(" + m[i] + "," + m[n - 1 - i] + ")";
}
n /= 2;
} return m[0];
}

Java: LinkedList  

public String findContestMatch(int n) {
LinkedList<String> res = new LinkedList<>(); for (int i = 1; i <= n; i++) res.add(i + ""); while (res.size() > 1) {
LinkedList<String> tmp = new LinkedList<>(); while (!res.isEmpty()) {
tmp.add("(" + res.remove(0) + "," + res.remove(res.size() - 1) + ")");
} res = tmp;
} return res.get(0);
}

Java:

public string FindContestMatch(int n) {
string[] arr = new string[n];
for (int i = 0; i < n; i++) arr[i] = (i + 1).ToString(); int left = 0;
int right = n - 1;
while (left < right)
{
while (left < right)
{
arr[left] = "(" + arr[left] + "," + arr[right] + ")";
left++;
right--;
}
left = 0;
} return arr[0];
} 

Python:

# Time:  O(n)
# Space: O(n)
class Solution(object):
def findContestMatch(self, n):
"""
:type n: int
:rtype: str
"""
matches = map(str, range(1, n+1))
while len(matches)/2:
matches = ["({},{})".format(matches[i], matches[-i-1]) for i in xrange(len(matches)/2)]
return matches[0]

Python:

class Solution(object):
def solve(self, groups):
size = len(groups)
if size == 1: return groups[0]
ngroups = []
for x in range(size / 2):
ngroups.append('(' + groups[x] + ',' + groups[size - x - 1] + ')')
return self.solve(ngroups) def findContestMatch(self, n):
"""
:type n: int
:rtype: str
"""
return self.solve(map(str, range(1, n + 1)))

Python: wo

class Solution():
def contestMatches(self, n):
s = []
for i in xrange(n):
s.append(str(i + 1))
while n > 1:
cur = []
for m in xrange(len(s) / 2):
cur.append((s[m], s[len(s) - 1 - m]))
s = cur
n /= 2 return s[0]   

Python: wo

class Solution():
def contestMatches(self, n):
s = []
for i in xrange(n):
s.append(str(i + 1)) return self.helper(s) def helper(self, s):
if len(s) == 1:
return s[0]
curr = []
i, j = 0, len(s) - 1
while i < j:
curr.append((s[i], s[j]))
i += 1
j -= 1
return self.helper(curr)  

C++:

// Time:  O(n)
// Space: O(n)
class Solution {
public:
string findContestMatch(int n) {
vector<string> matches(n);
for (int i = 0; i < n; ++i) {
matches[i] = to_string(i + 1);
}
while (matches.size() / 2) {
vector<string> next_matches;
for (int i = 0; i < matches.size() / 2; ++i) {
next_matches.emplace_back("(" + matches[i] + "," + matches[matches.size() - 1 - i] + ")");
}
swap(matches, next_matches);
}
return matches[0];
}
};

C++:

class Solution {
public:
string findContestMatch(int n) {
vector<string> v;
for (int i = 1; i <= n; ++i) v.push_back(to_string(i));
while (n > 1) {
for (int i = 0; i < n / 2; ++i) {
v[i] = "(" + v[i] + "," + v[n - i - 1] + ")";
}
n /= 2;
}
return v[0];
}
};

C++:

class Solution {
public:
string findContestMatch(int n) {
vector<string> v;
for (int i = 1; i <= n; ++i) v.push_back(to_string(i));
helper(n, v);
return v[0];
}
void helper(int n, vector<string>& v) {
if (n == 1) return;
for (int i = 0; i < n; ++i) {
v[i] = "(" + v[i] + "," + v[n - i - 1] + ")";
}
helper(n / 2, v);
}
};

  

  

All LeetCode Questions List 题目汇总

[LeetCode] 544. Output Contest Matches 输出比赛匹配对的更多相关文章

  1. [LeetCode] Output Contest Matches 输出比赛匹配对

    During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, ...

  2. 【leetcode】544. Output Contest Matches

    原题 During the NBA playoffs, we always arrange the rather strong team to play with the rather weak te ...

  3. 【LeetCode】544. Output Contest Matches 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...

  4. LeetCode Output Contest Matches

    原题链接在这里:https://leetcode.com/problems/output-contest-matches/description/ 题目: During the NBA playoff ...

  5. LeetCode 544----Output Contest Matches

    During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, ...

  6. BZOJ1612: [Usaco2008 Jan]Cow Contest奶牛的比赛

    1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 645  Solved: 433 ...

  7. Bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 传递闭包,bitset

    1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 891  Solved: 590 ...

  8. BZOJ 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛( floyd )

    对于第 i 头牛 , 假如排名比它高和低的数位 n - 1 , 那么他的 rank 便可以确定 . floyd -------------------------------------------- ...

  9. [bzoj1612][Usaco2008 Jan]Cow Contest奶牛的比赛_dfs

    Cow Contest奶牛的比赛 bzoj-1612 Usaco-2008 Jan 题目大意:题目链接. 注释:略. 想法: 我们对于每个点dfs,看一下比这个点大的点加上比这个点小的点是否是n-1即 ...

随机推荐

  1. Python 爬虫js加密破解(三) 百度翻译 sign

    第一步: 模拟抓包分析加密参数 第二步: 找到加密字段 调试出来的sign和抓取得到的数据一致,都是 275626.55195 第三部: 分析js加密方法 第四部:运行js代码: 仅供交流学习使用

  2. 解决Android8.0系统应用打开webView报错

    由于webView存在安全漏洞,谷歌从5.1开始全面禁止系统应用使用webview,使用会导致应用崩溃错误提示:Caused by: java.lang.UnsupportedOperationExc ...

  3. BZOJ-1085:骑士精神 (迭代加深 + A*搜索)

    题意:给定一个5*5的棋盘,上面有白马给妈给12匹,以及一个空格.问是否能在15步内有给定棋盘转移到目标棋盘. 如果可以,输出最小步数. 否则输出-1: 思路:由于步数比较小,我们就直接不记录状态vi ...

  4. django-发送文件

    客户端授权密码”,勾选“开启”,弹出新窗口填写手机验证码. settings.py配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBac ...

  5. STM32启动代码详细分析

    最近需要学习iap的功能,因此离不开stm32的启动代码的分析,以前看了很多遍,都看不懂,读书百遍,其义自见,因此我有看了一遍,下面的文章,挺好的,因此转载: 在上电复位后,我们都知道会先运行启动代码 ...

  6. Task 使用方法

    Task的使用方法 1. 调用无参数.无返回值方法 private void button1_Click(object sender, EventArgs e) { Task task = new T ...

  7. Discrete Cosine Transform

    离散余弦变换 由于实信号傅立叶变换的共轭对称性,导致DFT后在频域中有一半的数据冗余.离散余弦变换(DCT)在处理实信号时比离散傅立叶(DFT)变换更具优势.在处理声音信号这类实信号时,DFT得到的结 ...

  8. Minidumps 和 modules匹配

    简介 调试应用程序时,调试器必须加载可执行模块的符号,以便能够显示有意义的调用堆栈.当前源代码行.变量值等.如果您曾经调试过在另一个系统上创建的小型转储,那么您已经知道除了符号之外,调试器还需要访问创 ...

  9. Python 08 skimage

    原文:https://www.cnblogs.com/xdjun/p/7874794.html 命令: pip install numpy pip install scipy pip install ...

  10. 55、Spark Streaming:updateStateByKey以及基于缓存的实时wordcount程序

    一.updateStateByKey 1.概述 SparkStreaming 7*24 小时不间断的运行,有时需要管理一些状态,比如wordCount,每个batch的数据不是独立的而是需要累加的,这 ...