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. 检测正方形

快乐水题1688. 比赛中的配对次数

力扣 1688比赛中的配对次数

力扣 1688比赛中的配对次数

力扣每日一题 1688 比赛中的匹配次数

算法leetcode每日一练1365. 有多少小于当前数字的数字