476. Number Complement(求补数)

    xiaoxiao2021-03-25  63

    Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

    Note:

    The given integer is guaranteed to fit within the range of a 32-bit signed integer.You could assume no leading zero bit in the integer’s binary representation.

    Example 1:

    Input: 5 Output: 2 Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.

    Example 2:

    Input: 1 Output: 0 Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.

    题目大意:给定一个正整数,求其补数。补数的定义是:翻转原数的二进制表示之后得到的数,不考虑原数前面的0。

    解题思路:

    解法一:不停地对原数进行%2和/2的操作,如果取余结果为0,则加上对应位置的2的整数次方,直到原数变为0。

    代码如下:(13ms,beats 29.50%)

    public int findComplement(int num) { int res = 0; int i = 0; while (num != 0) { if ((num & 0x1) == 0) { res += Math.pow(2, i); } i++; num >>= 1; } return res; }

    解法二:一行代码搞定,大意是先将原数取翻,但此时原数左边的若干个0变成了1,我们只取需要的右半部分。其中java.lang.Integer.highestOneBit(int i)返回的是将i的二进制表示中最高非0位右边的所有位都置0所得到的数,例如对5(101)执行该方法返回的就是4(100)。

    代码如下:(11ms,beats 64.10%)

    public int findComplement(int num) { return (~num) & ((Integer.highestOneBit(num) << 1) - 1); }

    转载请注明原文地址: https://ju.6miu.com/read-37004.html

    最新回复(0)