LeetCode笔记

LeetCode笔记:561. Array Partition

2017-12-27  本文已影响4人  Cloudox_

问题(Easy):

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: 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.

大意:

给出一个正整数,输出它的补足数。所谓补足数是在二进制表示上补足。

注意:
1、给出的证书保证在32位有符号整型范围内。
2、你可以假设在整数的二进制表示形式中没有前置0。

例1:
输入:5
输出:2
解释:5的二进制表示是101(没有前置0),它的补足是010。所以你需要输出2。

例2:
输入:1
输出:0
解释:1的二进制表示是1(没有前置0),它的补足是0。所以你需要输出0。

思路:

题目的意思就是把一个数的二进制表示中的1和0置换掉,输出新的数字,所以一位位地遍历原数字的二进制表示,遇到0就在结果的对应比特位上加个1,这一点可以用左移操作来确定要加1的比特位,最后直接返回就是答案了。

代码(C++):

class Solution {
public:
    int findComplement(int num) {
        int res = 0;
        int bit = 1;
        while (num > 0) {
            int temp = num % 2;
            if (temp == 0) res = res + bit;
            num = num / 2;
            bit = bit << 1;
        }
        return res;
    }
};

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首页

上一篇 下一篇

猜你喜欢

热点阅读