319. Bulb Switcher

Borris發表於2019-10-11

解法一

思路

Brute Force 解法。 對 n 個開關,按步長為 1 ~ n 遍歷,改變相應位置開關的值。

程式碼
class Solution {
    public int bulbSwitch(int n) {
        int[] lights = new int[n];
        for (int i = 1; i <= n; i++) {
            for (int j = i; j <=n; j += i) {
                lights[j - 1] = lights[j - 1] == 1 ? 0 : 1;
            }
        }

        int count  = 0;
        for (int i = 0; i < n; i++) {
            if (lights[i] == 1) {
                count++;
            }
        }
        return count;
    }
}
複雜度分析

這個方法在 n = 1000000 之後會超時。但的確是最直接能想到的辦法。

  • 時間複雜度 O(n^2)
  • 空間複雜度 O(n)

解法二

思路

https://leetcode.com/problems/bulb-switche...

程式碼

(int)Math.sqrt(n);

Takeaway