LeetCode 319. Bulb Switcher

来源:互联网 发布:排序算法比较次数 编辑:程序博客网 时间:2024/05/23 11:47

描述

给出一个组灯,按照规则开灯关灯后,有多少盏灯还亮着

解决

纸上写出来后,发现其中关灯的数量构成了2,4,6,8,10……的等差数列。用等差数列求和,然后比较判断即可。


class Solution {public:    int bulbSwitch(int n) {        int t = 1;        int sum = 0;        do{            sum = 2 * t + t * t;            ++t;        }while (sum <= n);        --t;        --t;        sum = 2 * t + t * t;        if (n - sum == 0)            return t;        else            return t + 1;    }};

看到别人一个机智的方法
一个数的因子总是成对出现的,只有因子数为奇数的时候,灯最后才会开着,而只有当开方位整数是才会存在奇数个因子,所以只需要sqrt(n),这样就可以得到答案,因为1~sqrt(n),总共存在sqrt(n)个这样的数。

class Solution {public:    int bulbSwitch(int n) {        return sqrt(n);    }};
0 0
原创粉丝点击