319 Bulb Switcher

178 篇文章 0 订阅
160 篇文章 0 订阅

1 题目

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 i-th round, you toggle every i bulb. For the n-th round, you only toggle the last bulb. Find how many bulbs are on after n rounds.

Example:

Input: 3
Output: 1 
Explanation: 
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.

2 尝试解

2.1 分析

有N个灯泡,初始全部关闭,在第i个回合,拨动第k*i个灯泡的开关(k=1,2,3....),即第1回合全部打开,第2回合关闭第2个、第4个、第6个....灯泡的开关。问第N回合后,还有几个灯泡亮着。

考虑灯泡i,其开关被拨动了f(i)次,f(i)是i所有的因子数。对于小于√i的因子,一定有一个大于√i的因子与之对应,拨动两次后,状态不变。只有√i恰好为其因子时,只能拨动一次,状态改变。所以其实是问小于等于i的平方数有几个。

2.2 代码

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

3 标准解

class Solution {
public:
    int bulbSwitch(int n) {
        return sqrt(n);
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值