https://leetcode.com/problems/number-of-steps-to-reduce-a-number-to-zero/description/ Easy

Условие

Дано целое число num. За один шаг:

• если число чётное — делим его на 2,

• если нечётное — вычитаем 1. Верни количество шагов, чтобы превратить num в 0.

Примеры

Input: num = 14 Output: 6 Explanation: 14 → 7 → 6 → 3 → 2 → 1 → 0

Input: num = 8 Output: 4 Explanation: 8 → 4 → 2 → 1 → 0

Input: num = 123 Output: 12

Решение

fun numberOfSteps(num: Int): Int {
    var n = num
    var steps = 0

    // Повторяем, пока n не станет 0
    while (n > 0) {
        if (n % 2 == 0) {
            n /= 2 // Чётное — делим на 2
        } else {
            n -= 1 // Нечётное — вычитаем 1
        }
        steps++
    }

    return steps
}

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

O(log n), так как деление на 2 уменьшают число экспоненциально.

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

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