题目
Given an integer, write a function to determine if it is a power of two.
题意
给你一个整数,判读是否是2的幂次方。
题解
解法一:简单解法
1.特殊考虑1和0
2.一个数除2无非就有两个结果:
(1)能除尽,除不尽
(2)能除尽:
商为1(最后一步,2/2=1 )
商不为1
Python语言
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
if n==0:
return False
if n==1:
return True
while True:
if n % 2==0 and n/2==1:
return True
elif n % 2==0 :
n = n / 2
else:
return False
C++语言
class Solution {
public:
bool isPowerOfTwo(int n) {
//整数,特殊考虑0,1
if(n==0)
return false;
if(n==1)
return true;
while(1)
{
if(n%2==0&&n/2==1)//最后一步2/2=1
return true;
else if(n%2==0) //是二的倍数
n = n / 2;
else //不是二的倍数
return false;
}
}
};
解法二:位运算
首先要知道2的幂次方化成二进制只有一个1
1 1
2 10
4 100
8 1000
16 10000
Python语言
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
sum1 = 0
while n > 0:
sum1 = sum1 + ( n & 1)
n = n >> 1
return sum1 == 1
C++语言
class Solution {
public:
bool isPowerOfTwo(int n) {
int sum1=0;
while(n>0)
{
sum1 = sum1 + (n & 1);//尾数与1相余,1&0=0 ,1&1=1
n = n >> 1;
}
return sum1==1;
}
};