LeetCode 1688 比赛中的配对次数[循环 递归] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1688 比赛中的配对次数[循环 递归] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
本题有三种解法,一种是直接while循环,对n除2,直到n为1,在循环中先加n/2,再对奇数偶数情况讨论,让n在下轮中满足偶数对的情况,代码如下:
class Solution
public:
int numberOfMatches(int n)
int count = 0;
while(n > 1)
count += n / 2;
if(n % 2 == 0)
n /= 2;
else
n = n / 2 + 1;
return count;
;
递归方法就更简单了,同样的思路,两行就完事,代码如下:
class Solution
public:
int numberOfMatches(int n)
if(n == 1) return 0;
return n % 2 == 0 ? n / 2 + numberOfMatches(n / 2) : n / 2 + numberOfMatches(n / 2 + 1);
;
还有一种特别精妙的方法,从数学角度出发,不管多少轮,最后都有n-1个队伍被淘汰,那么就比赛了n-1次,配对了n-1次,代码如下:
class Solution
public:
int numberOfMatches(int n)
return n - 1;
;
以上是关于LeetCode 1688 比赛中的配对次数[循环 递归] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 2045. 到达目的地的第二短时间(记录第二短时间的bfs) / 1688. 比赛中的配对次数 / 2013. 检测正方形