LeetCode 319. Bulb Switcher 解题报告

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


限制条件

没有明确给出.


解题思路

我的思路:

这道题我觉得蛮简单的,因为我花了大概10分钟,用了4行代码就给Accept了。可能是因为我想的思路刚好是对的,所以下面讲讲我的整个思维过程。
首先观察题目给的例子,结合题意,很自然就能想到,一个开关i被拨动的次数就是i的约数的个数,比如第8个开关,它被拨动了4次,分别在 =1,2,4,8 时,而1,2,4,8就是8的约数。
所以题目就变成了求1-n中每个数 i 的约数个数,统计约数个数是奇数的数目,因为如果约数个数是奇数,则开关是开的。
那么下一步就是求i(in)的约数个数,想到这里,要发现一点,约数是成对存在的,即2是8的约数,那么 8÷2=4 也是8的约数,其中有一种特殊情况,就是i为完全平方数,比如9跟它的约数3,因此,
如果i是完全平方数,那么i的约数个数肯定是奇数,如果i不是完全平方数,由于约数成对出现,所以约数个数肯定是偶数。
想出了这一点,这道题就变成了更简单的题目:计算1-n中完全平方数的数目,到这里就不用我继续讲了吧。

——————华丽的分割线————————–
以上是我10分钟前的想法,然而在这洗澡的10分钟里,我突然想到了小于等于n的平方数的数目就是直接对n的平方根取整数,所以最佳的答案只需一行,直接返回对n的平方根的取整。


代码

我的代码

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

总结

这道题只要思路想对了,不用几分钟就能做出来,关键是能够一步一步把看似复杂的问题化成更简单的问题。
轻松秒杀这个坑,干其他事去了,每天坚持填坑!加油加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值