390.消除游戏
链接:390.消除游戏
难度:Medium
标签:递归、数学
简介:给你整数 n ,返回 arr 最后剩下的数字。
题解 1 - cpp
- 编辑时间:2022-01-04
- 内存消耗:5.8MB
- 编程语言:cpp
- 解法介绍:dfs, 每次减少后都为等差数列,记录每次的头值和间隔。
class Solution {
   public:
    /*
    cnt 有多少个
    step 每个间隔多少
    start 起始值
    dir 方向
    */
    int dfs(int cnt, int step, int start, int dir) {
        if (cnt == 1) return start;
        return dfs(cnt >> 1, step << 1,
                   start + (dir == 1 || cnt & 1 ? step : 0), dir * -1);
    }
    int lastRemaining(int n) { return dfs(n, 1, 1, 1); }
};