https://leetcode.com/problems/complement-of-base-10-integer | Easy |
---|
Допустим, у нас есть целое число n
. Его дополнением (комплементом) называется число, полученное путем замены всех битов 0
на 1
и всех битов 1
на 0
в его двоичном представлении. Например, для числа 5
(двоичное представление 101
) комплемент будет 010
, что соответствует десятичному числу 2
. Требуется написать функцию, которая принимает целое число n
и возвращает его комплемент.
Input:
n = 5Output:
2Explanation:
Двоичное представление числа 5 — "101". Его комплемент — "010", что соответствует числу 2 в десятичной системе.
Input:
n = 7Output:
0Explanation:
Двоичное представление числа 7 — "111". Его комплемент — "000", что соответствует числу 0 в десятичной системе.
Input:
n = 10Output:
5Explanation:
Двоичное представление числа 10 — "1010". Его комплемент — "0101", что соответствует числу 5 в десятичной системе.
fun bitwiseComplement(n: Int): Int {
// Если число равно 0, его комплемент — 1
if (n == 0) return 1
// Создаем маску с такими же битами, как у n, все из которых равны 1
var mask = 0
var temp = n
while (temp > 0) {
mask = (mask shl 1) or 1
temp = temp shr 1
}
// Комплемент числа путем применения XOR с маской
return n xor mask
}
O(log n), где n — входное число. Это связано с количеством битов в числе n, поскольку мы проходим по каждому биту один раз.
O(1), так как используется фиксированное количество дополнительной памяти.