- 掘金团队号上线,助你 Offer 临门! 点击 查看活动详情
前言
本题核心: 不识庐山真面目,只缘身在此山中
题目描述
这题是LeetCode1688. 比赛中的配对次数,也是今天的每日一题。
给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制:
如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。
如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。
返回在比赛中进行的配对次数,直到决出获胜队伍为止。
解题思路
很简单,我照着题目的思路老老实实做就好了。
解题代码
class Solution {
public int numberOfMatches(int n) {
if (n % 2 == 0) {//偶数
if (n / 2 == 1) {
return n / 2;
} else {
return n / 2 + numberOfMatches(n / 2);
}
} else {//奇数
if ((n - 1) / 2 > 0) {
return (n - 1) / 2 + numberOfMatches((n - 1) / 2 + 1);
} else {
return (n - 1) / 2;
}
}
}
}
咋看一看没什么问题,刷题常规打开评论区。我发现了这个
????什么鬼?n-1。我花了2分钟整理思绪,认真审题,然后完美作答。你告诉我n-1就可以了? 我不信,怎么肥四?怎么可以这样,我在审题栞栞👀
比赛遵循一种独特的赛制:.....直到决出获胜队伍为止!!!
好吧,不讲武德啊~
新解题思路
public int numberOfMatches(int n) {
return n-1;
}
总结
不管是在代码的世界还是在现实世界,我们总会被一些问题所困扰,深陷问题的泥泞中无法自拔,今天这道题让我明白,跳脱出来看问题,或者说有些时候问题它就不是问题。