@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% 的用戶