LeetCode 390 消除游戏[数学 归纳法 递归] HERODING的LeetCode之路

在这里插入图片描述
解题思路:
看似很麻烦的一道题目,如果运用数学的归纳法,将会非常简单。说白了就是找规律,但是其中的规律可以证明,证明过程请看阿飞大佬的这篇帖子,假设前向消除为f(n),反向消除为b(n),总结为3点:

  1. f(n)+b(n)=n+1;
  2. 当n为1时,f(n)=b(n)=1;
  3. f(n)=2*b(n/2);

代码如下:

class Solution {
    
    
public:
    int lastRemaining(int n) {
    
    
        return n == 1 ? 1 : 2 * (n / 2 + 1 - lastRemaining(n / 2));
    }
};

Guess you like

Origin blog.csdn.net/HERODING23/article/details/122263221