首页 > 代码库 > LeetCode 231 Power of Two
LeetCode 231 Power of Two
Problem:
Given an integer, write a function to determine if it is a power of two.
Summary:
判断一个数n是不是2的整数幂。
Analysis:
这道题首先需要注意n为非整数是返回false的情况。
1. 若将n转换为二进制数,如果n为2的整数幂,则转换得到的二进制数只包含一个一,故计算转换过程中1的个数,最终判断。
1 class Solution { 2 public: 3 bool isPowerOfTwo(int n) { 4 int cnt = 0; 5 6 while (n > 0) { 7 if (n % 2) { 8 cnt++; 9 } 10 n /= 2; 11 } 12 13 return cnt == 1 ? true : false; 14 } 15 };
可以简化为位操作的形式,如下:
1 class Solution { 2 public: 3 bool isPowerOfTwo(int n) { 4 int cnt = 0; 5 while (n > 0) { 6 cnt += (n & 1); 7 n >>= 1; 8 } 9 10 return cnt == 1; 11 } 12 };
2. 经过查网上大牛的代码,学到了一个神奇的技巧:当一个数n为2的整数幂时,其二进制最高位必为1,其余位数都为0。那么n-1最高位为0,其余位数均为1。则若n & (n -1)为0时,n必为2的整数幂。
1 class Solution { 2 public: 3 bool isPowerOfTwo(int n) { 4 return (n > 0) && !(n & (n - 1)); 5 } 6 };
LeetCode 231 Power of Two
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。