LeetCode之Power of Two

举报
chenyu 发表于 2021/07/27 01:22:30 2021/07/27
【摘要】 1、题目   Given an integer, write a function to determine if it is a power of two. Credits: Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases....

1、题目

 

Given an integer, write a function to determine if it is a power of two.

Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

Subscribe to see which companies asked this question.

 

 

 

 

2、分析

比如我们发现1、2、4、8、16转化成二进制为

1、10、100、1000、10000、

我们发现第一位是1后面都是0

思路1、

我们先把这个数字和1进行&操作得到一个数temp,然后原数右移动,然后把右移的数字再和1进行&操作,然后和temp相加,如果都是1000,temp之元数不是1之前都是0,最后一次右移动,就成了1,temp == 1,就可以了返回是

思路2、

我们原素减去-1和元素&操作,如果结果为0就说明是。

 

 

 

3、代码实现

C++代码实现1

 


  
  1. class Solution {
  2. public:
  3. bool isPowerOfTwo(int n) {
  4. int temp = 0;
  5. while (n > 0) {
  6. temp += (n & 1);
  7. n >>= 1;
  8. }
  9. return temp == 1;
  10. }
  11. };

 

 

 

 

 

C++代码实现2

 


  
  1. class Solution {
  2. public:
  3. bool isPowerOfTwo(int n) {
  4. return (n > 0) && !(n & (n - 1));
  5. }
  6. };

 

 

 

 

 

 

java代码实现2

 


  
  1. public class Solution {
  2. public boolean isPowerOfTwo(int n) {
  3. return (n > 0) && ((n & (n - 1)) == 0 ? true : false);
  4. }
  5. }

 

 

 

 

 

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/69789070

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。