Problem

Determine the number of bits required to flip if you want to convert integer n to integer m.

Example

Given n = 31 (11111), m = 14 (01110), return 2.

Note

-1的二进制补码就是32个1,因此这道题一定要考虑正负号的问题。
先将a和b异或得到c,若c为负,就说明a和b的符号不同,所以要多一次符号位的转换。
然后去检查c的二进制包含多少个1,方法是对c的每一位除以2取余。如果为1,就说明那一位为1,即a和b在那一位不同,需要进行转换。每次取余之后,c减小为二分之一,删除已经检查过的高位。

Solution

class Solution {
    public static int bitSwapRequired(int a, int b) {
        int c = a ^ b, count = 0;
        if (c < 0) {
            c ^= Integer.MIN_VALUE;
            count++;
        }
        while (c != 0) {
            count += c % 2;
            c /= 2;
        }
        return count;
    }
}

linspiration
161 声望53 粉丝