灯泡开关

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

示例:

输入: 3

输出: 1

解释:

初始时, 灯泡状态 [关闭, 关闭, 关闭].

第一轮后, 灯泡状态 [开启, 开启, 开启].

第二轮后, 灯泡状态 [开启, 关闭, 开启].

第三轮后, 灯泡状态 [开启, 关闭, 关闭].

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/bulb-switcher 著作权归领扣网络所有。

解析:举个例子:n=10,一开始所有灯泡都是关着的。

第一个位置,1*1=1,状态被改变了1次;

第二个位置,1*2=2,被改变了2次(1,2);

第三个位置,1*3=3,被改变了2次(1,3);

第四个位置(注意这里有新东西),1*4=4,2*2=4,被改变了3次(1,2,4);

第五个位置,1*5=5,被改变了2次(1,5);

.........

第八个位置,1*8=8,2*4=8,被改变了4次(1,2,4,8);

第九个位置,1*9=9,3*3=9,被改变了3次(1,3,9);

第十个位置,1*10=10,2*5=10,被改变了4次(1,2,5,10);

规律:凡是能开平方的位置(包括位置1)都改变了基数次,其他为偶数次(因为这些因数成对出现)。而且状态改变基数次的位置保持亮的状态,偶数次的位置状态则为关。

  所以问题转化为求n以及n以下所有能开方的数的个数即可;

  

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

原文地址:https://www.cnblogs.com/blog-of-zxf/p/11329753.html

时间: 2024-08-03 01:24:27

灯泡开关的相关文章

灯泡开关案例

<html> <head><title>灯泡开关案例</title> <!--其实灯泡开关的核心就仅是两张图片替换 --> <script> function xx() { var a = window.document.getElementById('test'); if(a.src.indexOf('on')>=0)//查找a里面src属性里是否有on这个字符.如果有就会得到字符所在的位置,范围值为数字.没找到就等于-1 {

灯泡开关问题

有编号1~100个灯泡,起初所有的灯都是灭的.有100个同学来按灯泡开关,如果灯是亮的,那么按过开关之后,灯会灭掉.如果灯是灭的,按过开关之后灯会亮.现在开始按开关.第1个同学,把所有的灯泡开关都按一次(按开关灯的编号: 1,2,3,......100).第2个同学,隔一个灯按一次(按开关灯的编号: 2,4,6,......,100).第3个同学,隔两个灯按一次(按开关灯的编号: 3,6,9,......,99).......问题是,在第100个同学按过之后,有多少盏灯是亮着的?这些灯的编号是多

Leetcode 672.灯泡开关II

灯泡开关II 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮.在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态. 假设这 n 只灯泡被编号为 [1, 2, 3 ..., n],这 4 个按钮的功能如下: 将所有灯泡的状态反转(即开变为关,关变为开) 将编号为偶数的灯泡的状态反转 将编号为奇数的灯泡的状态反转 将编号为 3k+1 的灯泡的状态反转(k = 0, 1, 2, ...) 示例 1: 输入: n = 1, m = 1. 输出: 2 说明: 状态为:

Leetcode 之 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 nth ro

319 Bulb Switcher 灯泡开关

初始时有 n 个灯泡关闭. 第 1 轮,你打开所有的灯泡. 第 2 轮,每两个灯泡切换一次开关. 第 3 轮,每三个灯泡切换一次开关(如果关闭,则打开,如果打开则关闭).对于第 i 轮,你每 i 个灯泡切换一次开关. 对于第 n 轮,你只切换最后一个灯泡的开关. 找出 n 轮后有多少个亮着的灯泡.示例:给定 n = 3.状态off表示灯泡关闭,on表示开启.初始时, 灯泡状态 [off, off, off].第一轮后, 灯泡状态 [on, on, on].第二轮后, 灯泡状态 [on, off,

2019大疆PC软件开发笔试——开关和灯泡两个电路板

题目描述: 小A是一名DIY爱好者,经常制作一些有趣的东西. 今天,小A突然想要来做这样一个东西.小A现在有两块同样大小为n×m,有n×m块大小为1×1小电路板拼成的矩形电路板,假设叫做电路板A和电路板B.电路板A上每个小电路板都是一个开关,电路板B上每个小电路板上都是一盏电灯泡.A与B之间存在如下关系:对于B上的某盏灯Bij的开关控制,有A上第i行与第j列所有开关并联控制.即: 现给一矩阵,表示B上灯泡的明暗状态,问是否存在一种A的开关状态,能够满足给出的B上的灯泡开关情况,如果有输出YES,

灯泡编程题-java

现在有100个灯泡,每个灯泡都是关着的,灯泡排序为1~100,接着将2的倍数的灯泡开关按一下,然后将3的倍数的灯泡开关按一下……直到将N的倍数的灯泡开关按一下,最后统计灯泡亮着的数目. 算法思路: 1.将灯泡数存入数组 2.数组都默认值为0 3.将N的倍数的灯泡从2~N改变一下数值,若灯泡本身为0,则赋值1,否则赋值为0 class Light{ public static void main(String[] args){ int[] nums = new int[100]; int inde

三极管原理,开关电路设计原则,NPN、PNP区别及常用三极管参数

三极管的工作原理 三极管是电流放大器件,有三个极,分别叫做集电极C,基极B,发射极E.分成NPN和PNP两种.我们仅以NPN三极管的共发射极放大电路为例来说明一下三极管放大电路的基本原理. 一.电流放大 下面的分析仅对于NPN型硅三极管.如上图所示,我们把从基极B流至发射极E的电流叫做基极电流Ib:把从集电极C流至发射极E的电流叫做集电极电流 Ic.这两个电流的方向都是流出发射极的,所以发射极E上就用了一个箭头来表示电流的方向.三极管的放大作用就是:集电极电流受基极电流的控制(假设电源 能够提供

周鸿祎《智能主义》读书笔记

第一章:智能主义     在周鸿祎看来,计算机和互联网的这几十年的发展带来的最令人兴奋的变革.发现最令人兴奋的变革发生在人工智能和大数据领域,可以预见的是人工智能与大数据的完美结合,将开启新一轮的发展高潮,我们或将迈入智能时代.     下一个五年.对于互联网和移动互联网安全来说,最大的威胁和挑战,来自于物联网技术带来的第四次工业革命. 在互联网时代,安全隐患带来的问题可能是信息的泄露,而在物联网时代,安全隐患带来的危害可能是致命的,比如说智能汽车被黑客控制. 关于智能硬件,作者认为,因为智能硬