灯泡到底亮几盏 ?
悲惨的心路历程
刚开始在题目上纠结了好久(语文理解力无能o(╥﹏╥)o)
题目有言:
每 2 个灯泡切换一次开关
我挠头:
那是要两个灯泡一起换吗?
还是隔两个灯泡换第三个灯泡吗?
回头看看样例…这都对不上啊
最后终于明白了
两个灯泡一组,换组内的最后一个灯泡
留下了恍然大悟的泪水
开始解题
我思考一番
第n轮 对n的倍数进行开关操作
这不找因子吗?
对于1~n的每一盏灯来说
偶数个因子 – 最后关
奇数个因子 – 最后开
例如
第四盏灯-- 因子为 1,2,4(奇数个)
第一轮开
第二轮关
第四轮开
然后我
就老老实实的去找1~n的每个数的因子个数了
意料之中 (* ̄︶ ̄)
卡在n = 99999 的样例
成功 超时 (多么痛的领悟)
每个数都去找因子 太耗时了
咋办呢?
回到开始
既然因子的奇偶有影响开关
那什么影响因子的奇偶个数呢?
关键来了
因子是 成对出现 的
只有 平方数 会出现奇数个因子
战况瞬间明了
只要找1~n内平方数的个数就好啦!
搞定!
总结:还是要注意 观察特征抓住重点 啊
代码如下:
class Solution {
public:
int bulbSwitch(int n) {
int cnt = 0;
for (int i = 1; i <= sqrt(n); ++i)
if (i * i <= n) cnt++; //寻找n内的平方数
return cnt;
}
};