首页 > 其他分享 >leetcode-476-easy

leetcode-476-easy

时间:2022-10-26 19:03:14浏览次数:51  
标签:binary int complement its num 476 easy integer leetcode

Number Complement

The complement of an integer is the integer you get when you flip all the 0's to 1's and all the 1's to 0's in its binary representation.

For example, The integer 5 is "101" in binary and its complement is "010" which is the integer 2.
Given an integer num, return its complement.

Example 1:

Input: num = 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: num = 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.
Constraints:

1 <= num < 231
Note: This question is the same as 1009: https://leetcode.com/problems/complement-of-base-10-integer/

思路一: 1 XOR 1 = 0, 0 XOR 1 = 1,用 XOR 可以满足 bit 取反,此时问题变成如何确定数字有多少位,利用 >> 操作符统计有多少位,最后构造一个所有位数都是 1 的数字

public int findComplement(int num) {
    int count = 0;
    int t = num;
    while (num > 0) {
        num >>= 1;
        count++;
    }

    int x = 0;
    while (count-- > 0) {
        x = (x << 1) + 1;
    }

    return x ^ t;
}

思路二:看了题解,发现还有另外的思路,可以用 highestOneBit() 找到 num 的最高 bit 位,接着向左一位,最后减一,变成一个所有位数都是 1 的数字,这种方法会比较简洁

标签:binary,int,complement,its,num,476,easy,integer,leetcode
From: https://www.cnblogs.com/iyiluo/p/16829651.html

相关文章