add complement of base 10 integer soln

This commit is contained in:
Sangeeth Sudheer 2022-04-13 00:38:54 +05:30
parent 5820974811
commit 658601137a
6 changed files with 127 additions and 0 deletions

View File

@ -0,0 +1,25 @@
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 `num`, return _its complement_.
**Example 1:**
Input: num = 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: num = 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.
**Constraints:**
* `1 <= num < 231`
**Note:** This question is the same as 1009: [https://leetcode.com/problems/complement-of-base-10-integer/](https://leetcode.com/problems/complement-of-base-10-integer/)

View File

@ -0,0 +1,18 @@
# Time: O(N) where N is number of bits
class Solution:
def findComplement(self, n: int) -> int:
if n == 0:
return 1
cn, bit = n, 1
while n > 0:
# XOR 1 can be used to flip bit.
# 0 XOR 1 = 1
# 1 XOR 1 = 0
cn = cn ^ bit
bit = bit << 1
n = n >> 1
return cn

View File

@ -0,0 +1,17 @@
class Solution:
def findComplement(self, n: int) -> int:
if n == 0:
return 1
mask = n
# Create mask of length matching num of bits
# in n (taken from Hacker's Delight, Figure 3-1)
mask |= mask >> 1 # \
mask |= mask >> 2 # \
mask |= mask >> 4 # |> Totalling 31 bits
mask |= mask >> 8 # /
mask |= mask >> 16 # /
# XOR 1 will flip the bit
return n ^ mask

View File

@ -0,0 +1,32 @@
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/](https://leetcode.com/problems/number-complement/)

View File

@ -0,0 +1,18 @@
# Time: O(N) where N is number of bits
class Solution:
def bitwiseComplement(self, n: int) -> int:
if n == 0:
return 1
cn, bit = n, 1
while n > 0:
# XOR 1 can be used to flip bit.
# 0 XOR 1 = 1
# 1 XOR 1 = 0
cn = cn ^ bit
bit = bit << 1
n = n >> 1
return cn

View File

@ -0,0 +1,17 @@
class Solution:
def bitwiseComplement(self, n: int) -> int:
if n == 0:
return 1
mask = n
# Create mask of length matching num of bits
# in n (taken from Hacker's Delight, Figure 3-1)
mask |= mask >> 1 # \
mask |= mask >> 2 # \
mask |= mask >> 4 # |> Totalling 31 bits
mask |= mask >> 8 # /
mask |= mask >> 16 # /
# XOR 1 will flip the bit
return n ^ mask