LeetCode之Power of Two

简介: LeetCode之Power of Two

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


class Solution {

public:

   bool isPowerOfTwo(int n) {

       int temp = 0;

       while (n > 0) {

           temp += (n & 1);

           n >>= 1;

       }

       return temp == 1;

   }

};


C++代码实现2


class Solution {

public:

   bool isPowerOfTwo(int n) {

        return (n > 0) && !(n & (n - 1));

   }

};


java代码实现2


public class Solution {

   public boolean isPowerOfTwo(int n) {

       return (n > 0) && ((n & (n - 1)) == 0 ? true : false);

   }

}

 

相关文章
|
存储 缓存 算法
LeetCode刷题---Two Sum(一)
LeetCode刷题---Two Sum(一)
Leetcode 4. Median of Two Sorted Arrays
题目描述很简单,就是找到两个有序数组合并后的中位数,要求时间复杂度O(log (m+n))。 如果不要去时间复杂度,很容易就想到了归并排序,归并排序的时间复杂度是O(m+n),空间复杂度也是O(m+n),不满足题目要求,其实我开始也不知道怎么做,后来看了别人的博客才知道有个二分法求两个有序数组中第k大数的方法。
55 0
|
存储 C++ Python
LeetCode刷题---Add Two Numbers(一)
LeetCode刷题---Add Two Numbers(一)
|
存储 算法 安全
LeetCode - #2 Add Two Numbers
我们社区从本期开始会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。
109 0
LeetCode - #2 Add Two Numbers
|
存储 算法 安全
LeetCode - #1 Two Sum
我们社区从本期开始会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。
LeetCode - #1 Two Sum
LeetCode 350. Intersection of Two Arrays II
给定两个数组,编写一个函数来计算它们的交集。
104 0
LeetCode 350. Intersection of Two Arrays II
|
Python
LeetCode 349. Intersection of Two Arrays
给定两个数组,编写一个函数来计算它们的交集。
94 0
LeetCode 349. Intersection of Two Arrays
LeetCode 342. Power of Four
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
92 0
LeetCode 342. Power of Four
LeetCode 160. Intersection of Two Linked Lists
编写一个程序,找到两个单链表相交的起始节点。
95 0
LeetCode 160. Intersection of Two Linked Lists
LeetCode 167 Two Sum II - Input array is sorted(输入已排序数组,求其中两个数的和等于给定的数)
给定一个有序数组和一个目标值 找出数组中两个成员,两者之和为目标值,并顺序输出
101 0