@author: sdubrz
@date: 2020.04.22
题号: 319
题目难度: 中等
考察内容: 脑筋急转弯儿
原题链接 https://leetcode-cn.com/problems/bulb-switcher/
题目的著作权归领扣网络所有,商业转载请联系官方授权,非商业转载请注明出处。
解题代码转载请联系 lwyz521604#163.com
初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。
示例:
输入: 3
输出: 1
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭].
你应该返回 1,因为只有一个灯泡还亮着。
通过次数9,840 提交次数21,626
解法
对于第 x 个灯泡,它状态切换的次数是由它能被多少个整数整除所决定的。如果它能被奇数个整数整除,那么它最终一定是开着的,如果能被偶数的整数整除,那么它最终是关着的。一般情况下,约数都是成对出现的,比如,如果 x 能被 y 整除,则它也一定能被 x/y 整除。所以大部分情况下,某个数 x 都会有偶数个约数,但是如果存在 x/y=y 的情况,就会发生 x 有奇数个约数的情况。所以说,如果 x 是某个正整数的平方,那么它最终的状态就是开着的,否则就是关着的。所以对于输入的 n ,我们只需要判断有多少个平方数小于等于 n 就可以了。也就是对 n 开方,取下整。
class Solution {
public int bulbSwitch(int n) {
int number = (int) Math.sqrt(n);
return number;
}
}
在LeetCode中的提交结果如下
执行结果: 通过 显示详情
执行用时 : 0 ms, 在所有 Java 提交中击败了 100.00% 的用户
内存消耗 : 35.9 MB, 在所有 Java 提交中击败了 50.00% 的用户