你的位置:首页 > Java教程

[Java教程]LeetCode Bulb Switcher 319


变换灯泡颜色

 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 round, you toggle every third bulb (turning on if it's off or turning off if it's on). For the nth round, you only toggle the last bulb. Find how many bulbs are on after n rounds.

Example:

Given n = 3. 
At first, the three bulbs are [off, off, off].After first round, the three bulbs are [on, on, on].After second round, the three bulbs are [on, off, on].After third round, the three bulbs are [on, off, off].
So you should return 1, because there is only one bulb is on.

按题意coding

public int bulbSwitch(int n){    int[] arrN = new int[n];    int count = 0;    for (int i = 0; i < arrN.length; i++) {      arrN[i] =0;    }    for (int i = 0; i < arrN.length; i++) {      for (int j = 0; j < arrN.length;j++ ) {        if(i==0){          arrN[j] = 1;//          j++;        }else{          int k = i+1;          if((j+1)%k==0){arrN[j]=(arrN[j]==1?0:1);}//          j=j+i;        }      }    }        for (int i = 0; i < arrN.length; i++) {      if (arrN[i]==1) {        count++;      }    }    return count;  }

 

运行超时:

灯泡颜色的变换只存在于自己的因子处

1.素数,只有1和自己。

2.普通数,因子成对出现。

3.只有完全平方数灯泡奇数次点亮不会熄灭。

此题转化为求完全平方数的个数!!!

比如:3-->1,4-->2,10-->3

1 public static int bulbSwitch(int n){2   return (int)Math.sqrt(n);3 }