看完这道题,很容易想到用双循环来模拟题中的过程。但是,如果真的用双循环来解决,就会得到超时的结果。..解题思路:(1)第i个灯泡的开关次数是i的约数;如果i有奇数个除数,则第i个灯泡最后点亮;如果i有偶数个除数,则第i个灯泡最后关闭。(2)因为约数总是成对出现(即如果x是i的约数,则i/x也是i的约数),所以只有当i是完全平方数时,i的约数是奇数(3)[1,n]中完全平方数的个数为最后一次开启状态的灯泡个数(4)设m为n的平方根并向下取整,mm为最大的完全平方数[1,n]数,即[1,n]中有m个完全平方数(即11,22,33,...,m*m)程序实现:/***@param{number}n*@return{number}*/varbulbSwitch=function(n){returnMath.floor(Math.sqrt(n));};复杂度分析:时间复杂度O(1)空间复杂度O(1)
