Java實現 LeetCode 476 數字的補數

476. 數字的補數

給定一個正整數,輸出它的補數。補數是對該數的二進制表示取反。java

示例 1:ide

輸入: 5
輸出: 2
解釋: 5 的二進制表示爲 101(沒有前導零位),其補數爲 010。因此你須要輸出 2 。
示例 2:spa

輸入: 1
輸出: 0
解釋: 1 的二進制表示爲 1(沒有前導零位),其補數爲 0。因此你須要輸出 0 。code

注意:leetcode

給定的整數保證在 32 位帶符號整數的範圍內。
你能夠假定二進制數不包含前導零位。
本題與 1009 https://leetcode-cn.com/problems/complement-of-base-10-integer/ 相同it

class Solution {
    public int findComplement(int num) {
        int temp = num, c = 0;
        while(temp > 0){
            temp >>= 1;
            c =  (c << 1) + 1;
        }
        return num ^ c;
    }
}