leetcode-1009-easy

发布时间 2023-03-29 20:44:48作者: iyiluo

Complement of Base 10 Integer

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 n, return its complement.

Example 1:

Input: n = 5
Output: 2
Explanation: 5 is "101" in binary, with complement "010" in binary, which is 2 in base-10.
Example 2:

Input: n = 7
Output: 0
Explanation: 7 is "111" in binary, with complement "000" in binary, which is 0 in base-10.
Example 3:

Input: n = 10
Output: 5
Explanation: 10 is "1010" in binary, with complement "0101" in binary, which is 5 in base-10.
Constraints:

0 <= n < 109
Note: This question is the same as 476: https://leetcode.com/problems/number-complement/

思路一:先用辗转相除法转换进制,使用队列存储值,最后还原数字

    public int bitwiseComplement(int n) {
        if (n == 0) return 1;
        Deque<Integer> stack = new ArrayDeque<>();

        while (n > 0) {
            int x = n % 2;
            stack.push(x == 0 ? 1 : 0);
            n /= 2;
        }

        int result = 0;
        int p = 1;
        while (!stack.isEmpty()) {
            result += stack.pollLast() * p;
            p *= 2;
        }

        return result;
    }