Leetcode 231. 2的幂 数学
地址 https://leetcode-cn.com/problems/power-of-two/
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 示例 1: 输入: 1 输出: true 解释: 20 = 1 示例 2: 输入: 16 输出: true 解释: 24 = 16 示例 3: 输入: 218 输出: false
解法一 第一反应是打表 ac .但是时间上不是最优
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 组成的数字
那么代码如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Solution { 2 public: 3 bool isPowerOfTwo(int n) { 4 if(n>0 && (n&-n) == n) return true; 5 return false; 6 } 7 };
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
![阿里打赏](https://files.cnblogs.com/files/itdef/ali2.bmp)
![微信打赏](https://files.cnblogs.com/files/itdef/weixin2.bmp)