Leetcode 319. Bulb Switcher Tag是脑筋急转弯的题目。。

Leetcode 319. Bulb Switcher
    一开始用模拟的方法(两个循环。。。简单粗暴)结果超时。。。然后看了下大神们提交的答案。。。终于明白了Tag里面脑筋急转弯的含义。。。智商还是不够用啊。
看题目:

319. Bulb Switcher

Total Accepted: 6085  Total Submissions: 15641  Difficulty: Medium

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.

看了分析就会恍然大悟,一个灯它被按的次数偶数时它最后是关的,当被按的次数是奇数时,它最后是开的。而第k轮按序号是k的倍数的灯,

所以我们就是求灯的序号能被多少个数整除,也就是它会被按下多少次。但是还没完,一个数,比如12,它能被3整除,12/3=4,所以它也能被4整除。12/2和12/6同理。

也就是说3和4,2和6这样能整除12的数是成对出现的,唯一的例外是这个数是个平方数,比如9,9/3=3,这个3就只有一个,所以最后的结论是一个数

如果是平方数,能整除它的数有奇数个,否则总是有偶数个数能整除它。所以一个灯的序号是平方数时它会被按奇数次,最后是亮的。

所以求最后亮的灯数只有一句代码:

     return (int)Math.sqrt(n);//n是灯的总数


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值