地址 https://leetcode-cn.com/problems/power-of-two/
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 示例 1: 输入: 1 输出: true 解释: 20 = 1 示例 2: 输入: 16 输出: true 解释: 24 = 16 示例 3: 输入: 218 输出: false
解法一 第一反应是打表 ac .但是时间上不是最优
1 class Solution { 2 public: 3 set<int> s ={ 4 1, 5 2, 6 4, 7 8, 8 16, 9 32, 10 64, 11 128, 12 256, 13 512, 14 1024, 15 2048, 16 4096, 17 8192, 18 16384, 19 32768, 20 65536, 21 131072, 22 262144, 23 524288, 24 1048576, 25 2097152, 26 4194304, 27 8388608, 28 16777216, 29 33554432, 30 67108864, 31 134217728, 32 268435456, 33 536870912, 34 1073741824 35 }; 36 bool isPowerOfTwo(int n) { 37 if(s.count(n) != 0) return true; 38 39 return false; 40 } 41 };
解法二 一个小技巧(简单题目很多都是需要这种小技巧)
如果n能够确认是 由一个1 和全部零组成的二进制数字 那么它肯定是2的幂
恰好
n&-n 返回的是n的二进制 数位上第一个1和0 组成的数字
那么代码如下
1 class Solution { 2 public: 3 bool isPowerOfTwo(int n) { 4 if(n>0 && (n&-n) == n) return true; 5 return false; 6 } 7 };