Brainteaser:Bulb Switcher

Brainteaser:Bulb Switcher

前言:

感想
每当遇到一个陌生的问题,都有一种退缩的感觉,好像不由自主的陷入到了本能的反应中,然后一直徘徊在这种做与不做的情境中,时间就这样消逝了。

分析:

这个问题,在看过博客1,2之后,总结一下,这个问题的思路。第k轮,灯泡的开合关的状态改变只有当灯泡的坐标能够整除k的时候。因此这个问题就转化为查看灯泡的坐标因子个数的问题,由于初始的第一轮是亮的,当灯泡坐标因子是奇数个,n轮之后的状态是亮的,否则是关的。上诉博客给予的提示就是求n的平方根。
这个时候,思维出现了问题,怎么会把求第一盏灯到n盏灯除数因子的问题,转化为求n的平方根呢?
引用博客1的话

We observe that if k | i then (i/k) | i . Hence, if k == i/k, or i is a square, then i has a odd number of divisors. And the number of squares less than or equal to n is floor ( sqrt (n)).

这句话按照中文的理解是:当且仅当i为完全平方数时,其因子个数为奇数,剩下的数字的因子肯定是偶数,最后这个问题转化为,从1到n中有多少平方数的个数.

代码:

public class Solution {
       public int bulbSwitch(int n) {
           return (int)Math.sqrt(n);
    }
}

你可能感兴趣的:(LeetCode)