例一、题目描述:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
分析:
python没有unsigned int类型
>>> print ("%x" % 0xFFFFFFFF)
ffffffff
>>> print ("%x" % -10)
-a
>>> print ("%x" % -0xFFFFFFFF)
-ffffffff
解答:
【方法一】
class Solution:
def NumberOf1(self, n):
# write code here
if n==0:
return 0
if n<0:
n=n&0xffffffff #这里把负数变成整数
return bin(n)[2:].count("1")
【方法二】
class Solution:
def NumberOf1(self, n):
# write code here
if n==0:
return 0
c=0
if n<0:
n=n&0xffffffff
while n:
n=n&(n-1) #n & (n - 1)消去n最后一位的1.消了几次就是n中有几个1.
c+=1
return c
例二、题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
//step1:异或是查看两个数哪些二进制位只有一个为1,这些是非进位位,可以直接加、减,结果表示非进位位进行加操作后的结果
//step2:按位与是查看两个数哪些二进制位都为1,这些都是进位位,结果需左移一位,表示进位后的结果
一直到进位为0
class Solution:
def Add(self, num1, num2):
# write code here
while num2:
result = (num1 ^ num2) & 0xffffffff
carry = ((num1 & num2) << 1) & 0xffffffff
num1 = result
num2 = carry
if num1 <= 0x7fffffff: #通过与0x7fffffff比较得到符号位,可以判断num1是正数还是负数,正数则直接返回
result = num1
else:
result = ~(num1^0xffffffff)
return result