初始時有 n 個燈泡關閉。 第 1 輪,你開啟所有的燈泡。 第 2 輪,每兩個燈泡你關閉一次。 第 3 輪,每三個燈泡切換一次開關(如果關閉則開啟,如果開啟則關閉)。第 i 輪,每 i 個燈泡切換一次開關。 對於第 n 輪,你只切換最後乙個燈泡的開關。 找出 n 輪後有多少個亮著的燈泡。
示例:
輸入:3輸出:1解釋:初始時, 燈泡狀態[關閉, 關閉, 關閉].**第一輪後, 燈泡狀態[開啟, 開啟, 開啟].
第二輪後, 燈泡狀態[開啟, 關閉, 開啟].
第三輪後, 燈泡狀態[開啟, 關閉, 關閉].
你應該返回 1,因為只有乙個燈泡還亮著。
解題:1. 第m(m2. 第m盞燈操作了多少次,等價於m這個數有多少個因數,所以f(m)=f(m-1)+0/1(m的因子個數為偶數,加0;m的因子個數為奇數,加1)
3. 乙個數要麼是素數,因子個數為2(1和它自身),要麼是合數,因子個數為奇數(只含有1個質因子,即為平方數時)或偶數(假設其有n個質因子,則其因數的總個數為c0n+c1n+....cnn,化簡後為若n為偶數,2x(c0n+c1n+...+c((n-1)/2))+c(n/2)n),偶數+偶數=偶數;若n為奇數2x(c0n+c1n+...+c((n-1)/2)),2x任意數=偶數 )
4. 所以,只有這個數為平方數時,其因子的個數才為奇數
5. 所以,f(m)=f(m-1)+0/1(當m為非平方數時,加0;當m為平方數時,加1)
6. 所以,此問題最終公式為:對n開根號,將其整數部分提取出來即為答案
7. 程式設計實現:result = (int)(sqrt(n));
Leetcode 319 燈泡開關
初始時有 n 個燈泡關閉。第 1 輪,你開啟所有的燈泡。第 2 輪,每兩個燈泡你關閉一次。第 3 輪,每三個燈泡切換一次開關 如果關閉則開啟,如果開啟則關閉 第 i 輪,每 i 個燈泡切換一次開關。對於第 n 輪,你只切換最後乙個燈泡的開關。找出 n 輪後有多少個亮著的燈泡。示例 輸入 3輸出 1解...
LeetCode(319 燈泡開關)
如題 最直觀的做法就是模擬每次開關操作,用乙個int陣列儲存狀態,每次去判斷對應的位置更改對應index的值,但是很顯然這是指數即的計算。那麼換個方向,我們就以每個位置會進行開合的次數來判斷,很顯然開合奇數次則為開啟,否則為關閉。那麼開合次數是由上面決定的,間隔n不就是對應整除n麼,那麼對應的就是再...
leetcode刷題,總結,記錄,備忘 319
leetcode319,bulb switcher there are n bulbs that are initially off.you first turn on all the bulbs.then,you turn off every second bulb.on the third ro...