[LeetCode] 231. Power of Two 2的次方数
Given an integer, write a function to determine if it is a power of two.
Example 1:
Input: 1 Output: true
Example 2:
Input: 16 Output: true
Example 3:
Input: 218 Output: false
给一个整数,写一个函数来判断它是否为2的次方数。
利用计算机用的是二进制的特点,用位操作,此题变得很简单。
2的n次方的特点是:二进制表示中最高位是1,其它位是0,
1 2 4 8 16 ....
1 10 100 1000 10000 ....
解法:位操作(Bit Operation),用右移操作,依次判断每一位的值,如果只有最高位是1,其余位都是0,则为2的次方数。
解法2: 位操作(Bit Operation),原数减1,则最高位为0,其余各位都变为1,把两数相与,就会得到0。
解法3: 用数学函数log
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public boolean isPowerOfTwo( int n) { if (n<= 0 ) return false ; while (n> 2 ){ int t = n>> 1 ; int c = t<< 1 ; if (n-c != 0 ) return false ; n = n>> 1 ; } return true ; } |
Java:
1 2 3 | public boolean isPowerOfTwo( int n) { return n> 0 && (n&n- 1 )== 0 ; } |
Java:
1 2 3 | public boolean isPowerOfTwo( int n) { return n> 0 && n==Math.pow( 2 , Math.round(Math.log(n)/Math.log( 2 ))); } |
Python:
1 2 3 4 5 | class Solution: # @param {integer} n # @return {boolean} def isPowerOfTwo( self , n): return n > 0 and (n & (n - 1 )) = = 0 |
Python:
1 2 3 4 5 | class Solution2: # @param {integer} n # @return {boolean} def isPowerOfTwo( self , n): return n > 0 and (n & ~ - n) = = 0 |
C++:
1 2 3 4 5 6 7 8 9 10 11 | class Solution { public : bool isPowerOfTwo( int n) { int cnt = 0; while (n > 0) { cnt += (n & 1); n >>= 1; } return cnt == 1; } }; |
C++:
1 2 3 4 5 6 | class Solution { public : bool isPowerOfTwo( int n) { return (n > 0) && (!(n & (n - 1))); } }; |
类似题目:
[LeetCode] Number of 1 Bits
[LeetCode] Power of Four
[LeetCode] 326. Power of Three
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步