翻牌的数论推倒题——319. 灯泡开关

文章目录

    • 题目
    • 题目解析
    • 解题代码

题目

翻牌的数论推倒题——319. 灯泡开关_第1张图片
OJ平台

题目解析

曾经做过一道一模一样的题目:翻扑克牌的题目
题目描述如下:翻牌的数论推倒题——319. 灯泡开关_第2张图片
首先我们应该很快清楚:

  1. 被翻牌奇数次的牌肯定是正面朝上。
  2. 被翻牌偶数次的牌肯定是背面朝上。

继续观察:
第一次—— 1*2、2*2、2*3…
第二次—— 1*3、2*3、3*3…

我们发现:
某个数的翻牌次数,就是他的因数个数(除去1),比如4的因数有1、2、4,所以除去1有两个,所以翻两次牌。

最后给出结论:由于有这个规律,所以只要因数有奇数个则对应翻牌偶数次——所以只有完全平方数满足!

解题代码

简单计数

class Solution {
public:
    int bulbSwitch(int n) {
        int i;
        int res = 0;
        for(int i = 1;i*i<=n;i++){
            res++;
        }
        return res;
    }
};

一次到位计数

class Solution {
public:
    int bulbSwitch(int n) {
        return sqrt(n);
    }
};

你可能感兴趣的:(LeetCode初级算法题,leetcode,算法,职场和发展)