leetcode 342. Power of Four

没想出来不用循环的。记录下。

如果是2的次方,必有num & (nums - 1)

    bool isPowerOfFour(int num) {
        if (num < 1) return false;
        if (num & (num - 1)) return false;  // 排除不是2的倍数
        if (num & 0x55555555) return true;  // 排除不是4的倍数,此时num是2的次方
        return false;
    }

或者第二步排除,直接(num - 1) % 3为0也可以,如果是4的倍数,减1后必能被3整除,从二进制角度考虑下即可。

不建议用对数,涉及浮点数,精度问题,见:https://discuss.leetcode.com/topic/33536/a-summary-of-all-solutions-new-method-included-at-15-30pm-jan-8th

posted on 2018-02-08 15:27  willaty  阅读(86)  评论(0编辑  收藏  举报

导航