Convert a Number to Hexadecimal

https://leetcode.com/problems/convert-a-number-to-hexadecimal/description/Easy

Условие

Дано целое число num, нужно вернуть его представление в шестнадцатеричном формате. В шестнадцатеричной системе используются цифры от 0 до 9 и буквы от a до f. Для отрицательных чисел следует использовать двухкомплементарное представление (как в 32-битной системе). Нельзя использовать встроенные функции для преобразования числа в шестнадцатеричное представление.

Примеры

Input: num = 26

Output: “1a”
Input: num = -1

Output: “ffffffff”

Решение

fun toHex(num: Int): String {
    if (num == 0) return "0"  // Специальный случай для нуля

    val hexChars = "0123456789abcdef"  // Шестнадцатеричные символы
    var result = StringBuilder()
    var n = num

    // Выполняем 8 итераций для 32-битного числа, чтобы избежать зацикливания при отрицательных числах
    while (n != 0 && result.length < 8) {
        val hexDigit = n and 0xF  // Получаем последние 4 бита числа
        result.append(hexChars[hexDigit])  // Добавляем соответствующий шестнадцатеричный символ
        n = n ushr 4  // Выполняем логический сдвиг вправо на 4 бита
    }

    return result.reverse().toString()  // Переворачиваем строку, так как символы добавлялись в обратном порядке
}

Временная сложность

O(1), так как число операций фиксировано (максимум 8 итераций для 32-битного числа).

Пространственная сложность

O(1), так как результат занимает фиксированное количество памяти для 8 символов.