231.2のべき乗(Python)
1631 ワード
タイトル
難易度:★☆☆☆☆タイプ:数学
整数を指定し、関数を作成して2のべき乗次数であるかどうかを判断します.
例
例1:
入力:1出力:true解釈:2^0=1
例2:
入力:16出力:true解釈:2^4=16
例3:
入力:218出力:false
に答える
これは非常に簡単な数学の問題で、入力数字nが2のべき乗であれば、条件を満たす:nを2で割った余剰数は必ずゼロで、除数は必ず2のべき乗で、私たちはここでそれぞれ反復法と再帰法を使って判断します.
シナリオ1:反復
シナリオ2:再帰
再帰は反復より簡潔に見える.
シナリオ3:バイナリ計算
入力数をバイナリに変換し,入力数nが2のべき乗であればnのバイナリ形態では最上位のみが「1」であり,他のビットはいずれも「0」であり,n−1の二次べき乗の最上位は「0」:,他のビットはいずれも「1」であるため,nのバイナリをn−1のバイナリとビット相で得られた結果は必ずゼロである.この原理によれば,入力数字が2のべき乗であるか否かを判断できる.ここで注意しなければならないのは、0は2のべき乗ではないので、入力がゼロでない制限を追加します.
質問やアドバイスがあれば、コメントエリアへようこそ~
難易度:★☆☆☆☆タイプ:数学
整数を指定し、関数を作成して2のべき乗次数であるかどうかを判断します.
例
例1:
入力:1出力:true解釈:2^0=1
例2:
入力:16出力:true解釈:2^4=16
例3:
入力:218出力:false
に答える
これは非常に簡単な数学の問題で、入力数字nが2のべき乗であれば、条件を満たす:nを2で割った余剰数は必ずゼロで、除数は必ず2のべき乗で、私たちはここでそれぞれ反復法と再帰法を使って判断します.
シナリオ1:反復
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
while n and n != 1: # n n 1
r, n = n % 2, n // 2 # n 2
if r != 0: #
return False # 2
return n == 1 # 2 , 1
シナリオ2:再帰
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
if n < 2: #
return n > 0 # n , False,n 1, True
# , 2 , 2
return n % 2 == 0 and self.isPowerOfTwo(n // 2)
再帰は反復より簡潔に見える.
シナリオ3:バイナリ計算
入力数をバイナリに変換し,入力数nが2のべき乗であればnのバイナリ形態では最上位のみが「1」であり,他のビットはいずれも「0」であり,n−1の二次べき乗の最上位は「0」:,他のビットはいずれも「1」であるため,nのバイナリをn−1のバイナリとビット相で得られた結果は必ずゼロである.この原理によれば,入力数字が2のべき乗であるか否かを判断できる.ここで注意しなければならないのは、0は2のべき乗ではないので、入力がゼロでない制限を追加します.
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
return n and n & (n-1) == 0
質問やアドバイスがあれば、コメントエリアへようこそ~