转:http://www.cnblogs.com/theskulls/p/4874849.html
利用位运算:
class Solution {
/**
*@param a, b: Two integer
*return: An integer
*/
public static int bitSwapRequired(int a, int b) {
// write your code here
int c = a^b;
int count = 0;
while(c!=0){
count += c&1;
c=c>>>1;
}
return count;
}
};
总耗时: 2834 ms
利用位运算 与减法
class Solution {
/**
*@param a, b: Two integer
*return: An integer
*/
public static int bitSwapRequired(int a, int b) {
// write your code here
int c = a^b;
int count = 0;
while(c!=0){
c = c&(c-1);
count++;
}
return count;
}
};
总耗时: 2366 ms
取一位判断一位:
class Solution {
/**
*@param a, b: Two integer
*return: An integer
*/
public static int bitSwapRequired(int a, int b) {
// write your code here
int count=0;
while(a!=0 || b!=0){
int ai = a&1;
int bi = b&1;
if(ai==1 && bi==0 || ai==0 && bi==1)
count++;
a = a>>>1;
b = b>>>1;
}
return count;
}
};
总耗时: 2103 ms
下面是自己写的python代码,可以通过42% 的数据
但是[-2147483648, 2147483647],当一个数为-2147483648时会出错
class Solution:
"""
@param a, b: Two integer
return: An integer
"""
def bitSwapRequired(self, a, b):
# write your code here
if a < 0:
a = 17179869184 + a
if b < 0:
b = 17179869184 + b
m, n = '{0:32b}'.format(a), '{0:32b}'.format(b)
m, n, count = list(m), list(n), 0
for i in range(len(m)):
if m[i] == ' ':
m[i] = '0'
if n[i] == ' ':
n[i] = '0'
if m[i] != n[i]:
count += 1
return count
换了一种写法,从后往前遍历,居然AC了:
class Solution:
"""
@param a, b: Two integer
return: An integer
"""
def bitSwapRequired(self, a, b):
# write your code here
if a < 0:
a = 17179869184 + a
if b < 0:
b = 17179869184 + b
m, n = '{0:32b}'.format(a), '{0:32b}'.format(b)
m, n, count = list(m), list(n), 0
# print(len(m))
# print(len(n))
for i in range(-1, -33, -1):
if m[i] == ' ':
m[i] = '0'
if n[i] == ' ':
n[i] = '0'
if m[i] != n[i]:
count += 1
return count
总耗时: 494 ms