1. 程式人生 > 其它 >LeetCode 476 數字的補數

LeetCode 476 數字的補數

對整數的二進位制表示取反(0110)後,再轉換為十進位制表示,可以得到這個整數的補數。

  • 例如,整數 5 的二進位制表示是 "101" ,取反後得到 "010" ,再轉回十進位制表示得到補數 2

給你一個整數 num ,輸出它的補數。

示例 1:

輸入:num = 5
輸出:2
解釋:5 的二進位制表示為 101(沒有前導零位),其補數為 010。所以你需要輸出 2 。

示例 2:

輸入:num = 1
輸出:0
解釋:1 的二進位制表示為 1(沒有前導零位),其補數為 0。所以你需要輸出 0 。
位運算
public static int findComplement(int num) {
    //與num二進位制位數相同且全為1的變數temp,將temp與num進行異或即為所求
    int temp = 0; // 0初始和1初始的效率不同
    while (temp < num) {
        temp <<= 1;
        temp += 1;
    }
    return temp ^ num;
}
測試用例
public static void main(String[] args) {
    int num = 5;
    int ans = FindComplement.findComplement(num);
    System.out.println("FindComplement demo01 result : " + ans);

    num = 1;
    ans = FindComplement.findComplement(num);
    System.out.println("FindComplement demo02 result : " + ans);
}
測試結果
FindComplement demo01 result : 2
FindComplement demo02 result : 0