leetcode 476 數字的補數 二進位制

2021-08-21 06:34:30 字數 2478 閱讀 6306

給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。

注意:

給定的整數保證在32位帶符號整數的範圍內。

你可以假定二進位制數不包含前導零位。

示例 1:

輸入: 5

輸出: 2

解釋: 5的二進位制表示為101(沒有前導零位),其補數為010。所以你需要輸出2。

class solution(object):

def findcomplement(self, num):

res =

result = 0

# 十進位制轉二進位制的方法:除2取餘,逆序排

while (num/2 != 0):

num = num/2

res.reverse() # 逆序

# 按位取反

for i,val_i in enumerate(res):

if (val_i=='0'):

res[i] = '1'

else:

res[i] = '0'

# 2進製轉為10進製

for j,val_j in enumerate(res):

if (val_j == '1'):

result += pow(2, len(res)-1-j)

return result

def main():

num = 1

myresult = solution()

print(myresult.findcomplement(num))

if __name__ == "__main__":

main()

備註:

1.pow()

方法返回 xy(x的y次方) 的值。(之前用2^一直報錯);

2.list不能和int互換,int只能和string互換。

3.二進位制轉十進位制這裡!!!長度減遍歷的次數,就可以讓迴圈的值調換方向;

5. 

運算子描述例項&

按位與運算子:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0

(a & b) 輸出結果 12 ,二進位制解釋: 0000 1100

|按位或運算子:只要對應的二個二進位有乙個為1時,結果位就為1。

(a | b) 輸出結果 61 ,二進位制解釋: 0011 1101

^按位異或運算子:當兩對應的二進位相異時,結果為1

(a ^ b) 輸出結果 49 ,二進位制解釋: 0011 0001

~按位取反運算子:對資料的每個二進位制位取反,即把1變為0,把0變為1 。~x類似於-x-1(~a ) 輸出結果 -61 ,二進位制解釋: 1100 0011,在乙個有符號二進位制數的補碼形式。

<<

左移動運算子:運算數的各二進位全部左移若干位,由<<右邊的數字指定了移動的位數,高位丟棄,低位補0。

a << 2 輸出結果 240 ,二進位制解釋: 1111 0000

>>

右移動運算子:把">>"左邊的運算數的各二進位全部右移若干位,>>右邊的數字指定了移動的位數

a >> 2 輸出結果 15 ,二進位制解釋: 0000 1111

6.進製轉換的用

print(int("100111",2)) # 39

print(int("101",2)) # 5

1、你可以自己寫函式採用 %2 的方式來算。

>>> binary = lambda n: '' if n==0 else binary(n/2) + str(n%2)

>>> binary(5)

'101'

>>>

binary = lambda n: '' if n==0 else binary(n/2) + str(n%2)

>>> binary(5)

'101'

>>>

2、採用 python 自帶了方法 bin 函式,比如 bin(12345) 回返回字串 '0b11000000111001', 這個時候在把0b去掉即可:

>>> bin(12345).replace('0b','')

'11000000111001'

bin(12345).replace('0b','')

'11000000111001'

3、也可以採用字串的 format 方法來獲取二進位制:

>>> "".format(12345)

'11000000111001'

>>>

"".format(12345)

'11000000111001'

LeetCode 476 數字的補數

給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。注意 給定的整數保證在32位帶符號整數的範圍內。你可以假定二進位制數不包含前導零位。示例 1 輸入 5 輸出 2 解釋 5的二進位制表示為101 沒有前導零位 其補數為010。所以你需要輸出2。示例 2 輸入 1 輸出 0 解釋 1的二進...

leetcode 476 數字的補數

給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。注意 給定的整數保證在32位帶符號整數的範圍內。你可以假定二進位制數不包含前導零位。示例 1 輸入 5輸出 2解釋 5的二進位制表示為101 沒有前導零位 其補數為010。所以你需要輸出2。示例 2 輸入 1輸出 0解釋 1的二進位制表示...

Leetcode 476 數字的補數

給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。注意 給定的整數保證在32位帶符號整數的範圍內。你可以假定二進位制數不包含前導零位。示例 1 輸入 5 輸出 2 解釋 5的二進位制表示為101 沒有前導零位 其補數為010。所以你需要輸出2。示例 2 輸入 1 輸出 0 解釋 1的二進...