[leetcode] 319. Bulb Switcher

There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every second bulb. On the third round, you toggle every third bulb (turning on if it's off or turning off if it's on). For the nth round, you only toggle the last bulb. Find how many bulbs are on after n rounds.

Example:

Given n = 3.
At first, the three bulbs are [off, off, off]. After first round, the three bulbs are [on, on, on]. After second round, the three bulbs are [on, off, on]. After third round, the three bulbs are [on, off, off].
So you should return 1, because there is only one bulb is on.

这道题比较有意思,按规律按下相应的灯泡开关,问最后有几个灯亮,题目难度为Medium。

判断每个灯泡是否亮需要知道它的开关一共按下了几次,如果是偶数次则最终是不亮的,是奇数次则是亮的。每个编号的灯泡只有在它的因子的轮数时才会被按下开关,这样判断每个灯泡最终是否亮只需要知道它的因子个数就可以了。举个栗子,编号为6的灯泡只有在第1、2、3和6轮时会被按下开关,一共4次,最终是不亮的。而大部分数的因子数都是偶数个的,除了平方数。所以除了平方数其他编号的灯泡最终都是不亮的,题目就变成了求n以内平方数的个数,问题就解决了。具体代码:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值