初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。

示例:

输入: 3
输出: 1 
解释: 
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭].

你应该返回 1,因为只有一个灯泡还亮着。

方法一:时间复杂度:O(n^2),超出时间限制

在第i轮是把第j个灯泡改变开关,条件是:j%i==0;

提交的代码:

class Solution {
    public int bulbSwitch(int n) {
        int arr[] = new int[n+1];
        if(n==0)
        {
            return 0;
        }
        if(n==1)
        {
            return 1;
        }
        Arrays.fill(arr,1);
        for(int i=2;i<n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(j%i==0)
                {
                    if(arr[j]==1)
                    {
                        arr[j] = 0;
                    }
                    else
                    {
                        arr[j] = 1;
                    }
                }
            }
        }
        if(arr[n]==0)
        {
            arr[n]=1;
        }
        else{
            arr[n]=0;
        }
        arr[0] = 0;
        for(int i=1;i<=n;i++)
        {
            if(arr[i]==1)
            {
                arr[0]+=1;
            }
        }
        return arr[0];
    }
}

方法二:

对于这道题,首先分析对于第i个灯泡,只有它的因子轮的操作可以改变它的状态,例如4号灯泡,就只会在1,2,4这些轮改变,5号灯泡,就只会在1,5这两轮改变,因为初始的所有的灯泡的状态都为关闭,所以如果一个灯泡含有奇数个因子,那么在这些操作之后他应该是开启的,相对的,如果是偶数个因子,那就是关闭的,所以问题此时转化为了看1-n的所有的灯泡有几个因子
然后去分析每个数的因子,看它们因子的个数,但是这里有一个可以优化的点就是对于一个数例如 a=b*c,b和c一定是在根号a的两端或者就等于根号a,那么统计它们的因子的个数只需要让j从1到根号a,如果灯泡序号可以整除这个j,那么因子数加2,当然如果两个因子数一样(也就是这个数字可以开平方)就加1,由此可以总结出来的一个规律是对于能开平方的数字,它的因子数一定是一个奇数,而对于不能开平方数字,它的因子数为一个偶数,所以又将问题转化为找出1-n中可以开平方的数
对于1-n中的可以开平方的数字,例如36,它里面可以开平方的数字1*1,2*2...6*6,对于100,它里面可以开平方的数字,1*1,...10*10,可以发现,对于一个数,它里面可以开平方的数字的个数就是它自己的开平方数,所以这道题的最终的解法就变为了直接求n的开平方数就是最后的结果

提交的代码:

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

Leetcode--319. 灯泡开关相关推荐

  1. LeetCode 319. 灯泡开关(找规律)

    1. 题目 初始时有 n 个灯泡关闭. 第 1 轮,你打开所有的灯泡. 第 2 轮,每两个灯泡你关闭一次. 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭).第 i 轮,每 i 个 ...

  2. LeetCode 319. 灯泡开关

    题目:   初始时有 n 个灯泡处于关闭状态.第一轮,你将会打开所有灯泡.接下来的第二轮,你将会每两个灯泡关闭第二个.   第三轮,你每三个灯泡就切换第三个灯泡的开关(即,打开变关闭,关闭变打开).第 ...

  3. LeetCode 319 灯泡开关[数学] HERODING的LeetCode之路

    解题思路: 这题本质就是数学,需要分析,每个灯泡会被翻转的时机正好是他的约数次遍历的时候,那么我们其实知道,对于每个数的约数都是成对出现的,除非是完全平方数,会有奇数个约数,所以,最后完全平方数的灯泡 ...

  4. Leetcode 319. 灯泡开关 解题思路及C++实现

    方法一:规律 解题思路: class Solution { public:int bulbSwitch(int n) {return sqrt(n);} }; 方法二:动态规划 解题思路: 会超出时间 ...

  5. 算法 319. 灯泡开关 python

    319. 灯泡开关 思路 整数的因数 因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数. class Solution(object):def bulbSwitch( ...

  6. 【LeetCode】灯泡开关Ⅰ~ Ⅳ(你还是把我关了吧)

    [LeetCode]灯泡开关Ⅰ~ Ⅳ

  7. LeetCode 5353. 灯泡开关 III

    5353. 灯泡开关 III 房间中有 n 枚灯泡,编号从 1 到 n,自左向右排成一排.最初,所有的灯都是关着的. 在 k  时刻( k 的取值范围是 0 到 n - 1),我们打开 light[k ...

  8. leetcode 319. Bulb Switcher | 319. 灯泡开关

    题目 https://leetcode.com/problems/bulb-switcher/ 题解 本题将 对问题抽象的能力 的考察做到了极致. 思路 怎么理解(int)Math.sqrt(n)就是 ...

  9. 319. 灯泡开关--Python

    初始时有 n 个灯泡处于关闭状态.第一轮,你将会打开所有灯泡.接下来的第二轮,你将会每两个灯泡关闭一个. 第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开).第 i 轮,你每 i ...

  10. 题意解读+详细题解-Leecode 319. 灯泡开关——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十天 题目链接:https://leetcode-cn.com/problems/bulb-switcher/ 题解汇总:https://zhanglong.blog.cs ...

最新文章

  1. 类别继承-程序代码再用
  2. Python网络数据采集2-wikipedia
  3. python封装一个效率极高的 批量更新、插入合一的工具
  4. VS2010中添加lib库引用
  5. Onvif开发之Linux下gsoap的使用及移植
  6. java开源论坛 discuz_Discuz开源论坛
  7. Android-动画-view 动画笔记
  8. 介绍一款免费的词典与文本翻译软件-灵格斯 lingoes
  9. 开源软件漏洞安全风险分析
  10. 思维导图的种类及应用,思维导图教程
  11. 一文了解AAAI国际会议–附: 各年论文连接
  12. xp计算机workgroup无法访问,弹出“Workgroup无法访问”的提示?XP 工作组没有权限的解决办法...
  13. 使用嵌套循环打印图形
  14. JFreeChart饼状图显示百分比
  15. Android : Broadcast
  16. CodeBlocks如何将英文环境改为中文
  17. 手机扫二维码登录是怎么实现的?
  18. 软件定制开发解决方案
  19. Java查找一个字符串中某字符出现的次数
  20. java 从已知日期计算干支纪日_干支纪日在线换算(干支纪日从何时开始)

热门文章

  1. [编程启蒙游戏] 1. 猜数字
  2. LeetCode 508. 出现次数最多的子树元素和(递归)
  3. POJ 1028 浏览器前进后退(双栈)
  4. python为什么是蟒蛇_Python 为什么推荐蛇形命名法?
  5. mac node oracle,将Python3.5(Mac OS X El Capitan)连接到Oracle集群(远程)
  6. 安装linux出现基础系统出错,Linux系统出错提示信息详解
  7. 可交互的 Attention 可视化工具!我的Transformer可解释性有救了?
  8. 【深度揭秘】百度、阿里、腾讯内部岗位级别和薪资结构,附带求职建议!
  9. 蚂蚁金服4轮面经(Java研发):G1收集器+连接池+分布式架构
  10. 论文浅尝 | 一种用于新闻推荐的深度知识感知网络