码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode算法题解

时间:2015-04-15 16:47:13      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

1、给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?(181)

解法一:举例说明,为了减少复杂度,就使用八位二进制吧。设 A = 0010 1011, B = 0110 0101.
1. C = A & B = 0010 0001;
2. D = A | B = 0110 1111;
3. E = C ^ D = 0100 1110;
4. 结果E中有4个1,那么也就是说将A变成B,需要改变4位(bit)。
至于如何判断E的二进制表示中有几个1,可以采用快速移位与方法。
算法原理如下:
1. A & B,得到的结果C中的1的位表明了A和B中相同的位都是1的位;
2. A | B, 得到的结果D中的1的位表明了A和B在该位至少有一个为1的位,包含了A 与 B 都是1的位数,
经过前两步的位运算,,C 中1的位表明了A 和 B在该位都是1,D中为0的位表明了A 和 B 在该位都是0 ,所以进行第三步。
3. C ^ D,E 中为1的位表明了A 和 B不同的位。

 1 class Solution {
 2     /**
 3      *@param a, b: Two integer
 4      *return: An integer
 5      */
 6     public static int bitSwapRequired(int a, int b) {
 7         
 8        /* int getNum(int n)
 9         {
10             if(n==0) 
11             {
12                 return 0;
13             }
14             int count=0;
15             while(n)
16             {
17                 n &= (n-1);
18                 count++;
19             }
20             return count;
21         } */
22         int count = 0;
23         int c = a & b;
24         int d = a | b;
25         int n = c ^ d;
26         if(n == 0)
27         {
28             return 0;
29         }
30         while(n != 0)
31         {
32             n &= (n-1);
33             count++;
34         }
35         
36         
37         return count;
38     }
39     
40  
41 };

 

LeetCode算法题解

标签:

原文地址:http://www.cnblogs.com/CoolRandy/p/4428706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!