/* * @lc app=leetcode.cn id=231 lang=c * * [231] 2的幂 * * https://leetcode-cn.com/problems/power-of-two/description/ * * algorithms * Easy (44.38%) * Total Accepted: 13.8K * Total Submissions: 31.2K * Testcase Example: '1' * * 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 * * 示例 1: * * 输入: 1 * 输出: true * 解释: 2^0 = 1 * * 示例 2: * * 输入: 16 * 输出: true * 解释: 2^4 = 16 * * 示例 3: * * 输入: 218 * 输出: false * */ bool isPowerOfTwo(int n) { if(n<=0 || n>2147483647)//2的幂最小是1 int最大为2147483647 return false; while(n>1){ if(n%2!=0) return false; n /=2; } return true; }
如果除2有余数的话那肯定就不是了。
还看到大佬写的一句话:
return log(n)/log(2)==(int)(log(n)/log(2));
但是这个 到了2的三十次方 就不对了 就差这一个 不知道为什么。
# # @lc app=leetcode.cn id=231 lang=python3 # # [231] 2的幂 # # https://leetcode-cn.com/problems/power-of-two/description/ # # algorithms # Easy (44.38%) # Total Accepted: 13.8K # Total Submissions: 31.2K # Testcase Example: '1' # # 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 # # 示例 1: # # 输入: 1 # 输出: true # 解释: 2^0 = 1 # # 示例 2: # # 输入: 16 # 输出: true # 解释: 2^4 = 16 # # 示例 3: # # 输入: 218 # 输出: false # # class Solution: def isPowerOfTwo(self, n: int) -> bool: return (n>0) and (n & (n-1))==0
这里 &进行与 运算,如果是2的幂的话,比如4, 4是 0100 3是0011 2是 0010 与运算结果为0 才是2的幂 不为0则不是