题目描述

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

示例1

        输入:
3
输出:
1
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭]. 你应该返回 1,因为只有一个灯泡还亮着。

题解

首先有 个灯泡,假设编号为 。第 轮,所有编号是 的倍数的灯泡被开关了一次。第 轮,所有编号是 的倍数的灯泡被开关了一次。类推下去,第 轮,所有编号是 的倍数的灯泡被开关了一次。

综上,对于编号为 的灯泡来说,它最终被开关的次数取决于 有几个因数。如果有奇数个因数,那么它最后就是开着的,否则就是关着的。

那么我们有一个定理:如果一个正整数有奇数个因数,那么它一定是完全平方数

最浅显的证明就是,一个数 的因数按照从小到大排个序,首尾两两一对之积一定等于 。而如果因数只有奇数个,最中间一个因数 只会出现一次,那么

严格证明也不难,首先将 质因数分解为:

那么 的因数个数就是:

因为 的因数个数是奇数,所以任意 必定是奇数,即任意 必定是偶数。

那么 就可以写作:

这就证明了 一定是一个完全平方数。

所以问题就转化为了 之间有多少个完全平方数。答案就是

在具体实现的时候,为了防止出现浮点数误差(比如 算出来是 ,取整得到 ),我们可以计算 的结果。

代码

c++

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

每日算法系列【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. 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符

    题目描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 示例1 输入: s = &quo ...

  6. 算法 319. 灯泡开关 python

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

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

    [LeetCode]灯泡开关Ⅰ~ Ⅳ

  8. LeetCode 5353. 灯泡开关 III

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

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

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

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

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

最新文章

  1. 参加完Python培训后有哪些就业方向
  2. Spring学习五(JDBC支持)
  3. 阿里云主机安装Memcached扩展优化WordPress
  4. SharePoint 2013的100个新功能之搜索(一)
  5. FCOS: A Simple and Strong Anchor-free Object Detector
  6. 额外参数_Pytorch获取模型参数情况的方法
  7. 台式计算机M丅BF是什么,中南民族大学计算机系统结构试卷
  8. python实现excel的覆盖写入和追加
  9. 夜神模拟器:adb命令
  10. HTTP、TCP连接工具
  11. Talk预告 | 北京大学人工智能研究院杨耀东:一个合作博弈的通用求解框架
  12. 利用身体记忆GRE词汇
  13. 电源技术中的onsemi ESD5B5.0ST1G,ESD9B3.3ST5G,ESD9B5.0ST5G,SZESD9B5.0ST5G,ESD静电保护管 TVS管 电容值低,反应速度快的解决方案
  14. 简单快速的运行 Zheng 平台(配置篇)
  15. Oracle官文,明确20c不能用于生产环境
  16. GlobalSign 企业型SSL 证书
  17. 如何自建obs服务器,使用 Nginx+OBS 搭建rmtp直播服务器并进行直播
  18. c++primer读书笔记
  19. linux usb音频,audio - 如何从linux USB捕获设备捕获与ffmpeg同步的音频和视频 - 堆栈内存溢出...
  20. java程序画米奇_儿童简笔画之拿着福字的米奇

热门文章

  1. [DOTween]使用过程中的一些注意事项记录
  2. word-wrap、word-break、white-space
  3. 顶尖,何为顶尖?你知道吗?我知道..
  4. 爬虫实战—模拟登陆oschina
  5. linux socket编程:简易客户端与服务端
  6. thinkphp5.0如何隐藏index.php入口文件
  7. 20155305乔磊2016-2017-2《Java程序设计》第七周学习总结
  8. 两款工控控件对比评测:Iocomp和ProEssentials
  9. 【排序】内部排序算法实现
  10. AutoCompleteTextView输入汉字拼音首字母实现过滤提示(支持多音字,Filterable的使用)...