LeetCode#319 燈泡開關 Java

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

本文是在 LeetCode 刷題的筆記,如有不足之處,歡迎通過留言或QQ賜教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章