Leetcode--Java--319. 灯泡开关

题目描述

初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。

第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。

找出并返回 n 轮后有多少个亮着的灯泡。

样例描述

在这里插入图片描述

思路

数论 + 推论
可以发现规律如下:
在这里插入图片描述
约束个数是奇数的数有什么性质
在这里插入图片描述
在 [1,n] 内有多少个数,其约数的个数为奇数。这些约数个数为奇数的灯泡就是最后亮着的灯泡。所以问题最终转换为:[1,n] 中完全平方数的个数为多少。
根据数论推论,[1,n]中完全平方数的个数为根号n

代码

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

猜你喜欢

转载自blog.csdn.net/Sherlock_Obama/article/details/121327526