Leetcode 319. Bulb Switcher

Bulb Switcher

好久没更新博客啦,主要是因为都没刷到什么好题,这一篇也是大大的水题,不过因为思考的过程种发生了种种有(yu)趣(chun)的故事,姑且把它当作一篇娱乐向的博文来写233
不过,友情提示,前方卖蠢高能,看完你可能觉得又浪费了几分钟宝贵的时间233

  • 题目
    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.
    大意就是说,有n个灯,从1到n开始遍历,每次改变是i的倍数的灯的状态,求最后亮着的灯的个数

  • 思路

    第一次不思考的答案:欸挺简单的,暴力模拟一下~每个灯开关次数不就是由有多少因子决定的嘛!对每个灯的序号用个遍历求一下因子,然后遇见一个因子就改变一下灯的状态,欸机智如我!于是就有了以下的代码:

class Solution {
public:
    int bulbSwitch(int n) {
        int num = 0; 
        for(int i = 1; i <= n; i++) {
            int sw = 0; 
            for(int j = 1; j <= i; j++) {
                if(i % j == 0) sw = (1-sw);          
            }
            num += sw; 
        }
        return num; 
    }
};

瓦特?你跟我说TLE?!(陷入沉思)


  • 第二次思考
    唔,好像,因子是成对的哦!只有自己的开方是只经历一次的!也就是说,比如4,如果因子1和4是成对的,也就是成对的因子不会改变灯的开关状态,那只要判断一个数是不是平方数就好啦,因为只有平方数会被改变状态嘛!思及至此,我不禁落下愚蠢的泪水,只是我万万没有想到,更蠢的还在后面
class Solution {
public:
    int bulbSwitch(int n) {
        if(n == 0) return 0; 

        int num = 1;
        while(pow((int)num, (int)2) <= n) num++; 
        return num-1; 
    }
};

厉害了我的姐,你居然用这种方法判断平方数,快去面壁!

  • 最后……
    愚蠢.jpg

对不起我觉得我需要睡个觉冷静一下……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值