美文网首页
Bulb Switcher

Bulb Switcher

作者: 我叫胆小我喜欢小心 | 来源:发表于2017-04-25 10:42 被阅读12次

题目来源
给一个n,有n个灯泡,第一次每个都打开,第二次每隔一个触发开关,第三次每隔两个触发开关,直到第n次,最后还剩多少个开着的。
我一开始想的是n^2的做法,然后超时了。
之后稍微改进一点点,但是还是超时。

class Solution {
public:
    int bulbSwitch(int n) {
        vector<int> bulbs(n, 0);
        int cnt = 0;
        for (int i=1; i<=n; i++) {
            for (int j=1; i*j<=n; j++)
                bulbs[i*j-1]++;
        }
        for (int i=0; i<n; i++)
            cnt += (bulbs[i] % 2 == 1);
        return cnt;
    }
};

想了想貌似可以用动态规划?想了想也没啥用。
看了下讨论区…代码如下:

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

因为只有当某个数是平方数的时候,它的因子数目才是奇数个,假如不是平方数,比如12,有1和12,2和6,3和4,一共6个。每一个因子i都有另一个因子n/i,除非两个因子相等。

相关文章

网友评论

      本文标题:Bulb Switcher

      本文链接:https://www.haomeiwen.com/subject/ymgmzttx.html