[Leetcode] 476. Number Complement 解题报告

来源:互联网 发布:淘宝上都是国产植鞣革 编辑:程序博客网 时间:2024/06/05 20:47

题目

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

Note:

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

Example 1:

Input: 5Output: 2Explanation: 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: 1Output: 0Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.

思路

本来直接取反(~num)就可以了,但这样会在~num的二进制表示中产生额外的前导1。所以我们的思路就是定义一个掩码,使得该掩码在num的前导0的位置上全部为0,其余位置上全部为1。这就是下面代码片段中的~mask。得到~mask之后,再与~num进行与操作就可以了。

代码

class Solution {public:    int findComplement(int num) {        unsigned mask = ~0;        while (num & mask) {            mask <<= 1;        }        return ~mask & ~num;    }};

原创粉丝点击