基本思想:
想到了统计每个元素的因子个数,但是又超时又有问题;
其实可以从n=1开始讨论,因为n=1,n=2即为每一个,每两个切换的例子;
所以需要寻找奇数个因子个数的数字;
其实考虑一下,之前求因子采用的范围为1~sqrt(x)进行搜索;
但是当,x为完全平方数,必定有偶因子,例如:9;
9的因子搜索范围为1~sqrt(9)=3;
所以因子为;
1,9
3,3
如果为非完全平方数,例如:7;
搜索范围为1~sqrt(10)=3;
所以因子为
1,10
2,5
为偶数个;
所以实际上就是找n范围内的完全平方数个数,其实就是sqrt(n)的向下取整个数;
具体代码:
class Solution {
public:
int bulbSwitch(int n) {
return sqrt(n);
}
};