給定乙個正整數,輸出它的補數。補數是對該數的二進位制表示取反。
注意:
給定的整數保證在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的二進...