[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 ith round, you toggle every i bulb. 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.

题目大意:
开始有n盏灯处于off状态:
第1轮:将所有的灯变为on状态
第2轮:把所有是2的倍数的灯转变状态(on的变为off,off的变为on),即:把所有2的倍数的灯转变为off状态。
第3轮:把所有是3的倍数的灯转变状态(on的变为off,off的变为on);
·
·
·
第n轮:把所有是n的倍数的灯转变状态。

分析:对第i盏灯来说,改变状态的次数,是它所有因子的个数之和,如对第4盏灯,4的因子分别是1,2,4 ,第4盏灯改变的次数是3次,即off->on->off->on结果是on,
对第i盏灯若最终状态是on的话,因子个数应该是奇数。
第i盏灯若最终状态是off的话,因子个数应该是偶数。

又因为只有完全平方数的因子是奇数个。(4—-1,2,4 ; 4=2*2)原因是出了完全平方数其余的因子都是成对出现的。而完全平方数的平方根只会统计一次。
那么问题就简化为了求1到n之间完全平方数的个数。

代码实现:
public int bulbSwitch(int n) {
return (int)Math.sqrt(n);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值