• LeetCode319—灯泡开关


    题目描述:

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

    示例:

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

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

    解题思路:

    首先,因为电灯一开始都是关闭的,所以某一盏灯最后如果是点亮的,必然要被按奇数次开关。

    所以如果n有k个因子,且k为奇数,那么最终灯就亮(如1、4、9),1=1*1  4=1*4=2*2 都只有奇数个因子

    如果k为偶数,灯就灭(如2、3、5) 2=1*2  3=1*3  5=1*5 都有偶数个因子

    为什么n有奇数个因子操作n轮后灯会亮着,而n有偶数个因子操作n轮后灯会灭?

    因为因数都是成对出现的(相当于抵消了),这意味着实际起到翻转作用(0->1)的,只有完全平方数而已

    所以n个灯泡翻转n轮,我们只要看看到n位置,一共有多少个完全平方数即可!

    代码实现:

    class Solution {
        public int bulbSwitch(int n) {
            return (int)Math.sqrt(n);
        }
    }
  • 相关阅读:
    JS深度判断两个数组对象字段相同
    box-shadow inset
    swiper实现滑动到某页锁住不让滑动
    vuex上手文章参考
    js基础补漏
    react学习文章
    C# .Net String字符串效率提高-字符串拼接
    JS,Jquery获取各种屏幕的宽度和高度
    highcharts的dataLabels如何去处阴影
    .net C# 抽奖,中奖
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309491.html
Copyright © 2020-2023  润新知