Рубрики
Без рубрики

Решение: Количество шагов для уменьшения числа до нуля

Это часть серии пояснений к решениям Leetcode (индекс). Если вам понравилось это решение или четыре… Помеченный алгоритмами, javascript, java, leetcode.

Решения Leetcode (Серия из 161 детали)

Это часть серии пояснений к решению Leetcode ( индекс ). Если вам понравилось это решение или вы сочли его полезным, пожалуйста, поставьте лайк этому сообщению и/или |/проголосуйте |/мое решение публикуется на форумах Leetcode .

Проблема с кодом кода # 1342 (легко): Количество шагов для уменьшения числа до нуля

Описание:

Дано неотрицательное целое число номер , верните количество шагов, чтобы уменьшить его до нуля. Если текущее число четное, вы должны разделить его на 2, в противном случае вам придется вычесть из него 1.

Примеры:

Ввод: числа = [1,2,3]
Выход: [1,3,2]
Ввод:
Выход: 6
Объяснение: Шаг 1) 14 четно; разделите на 2 и получите 7. Шаг 2) 7 нечетно; вычтите 1 и получите 6. Шаг 3) 6 четно; разделите на 2 и получите 3. Шаг 4) 3 нечетно; вычтите 1 и получите 2. Шаг 5) 2 четно; разделите на 2 и получите 1. Шаг 6) 1 нечетно; вычтите 1 и получите 0.
Ввод:
Выход: 4
Объяснение: Шаг 1) 8 четно; разделите на 2 и получите 4. Шаг 2) 4 четно; разделите на 2 и получите 2. Шаг 3) 2 четно; разделите на 2 и получите 1. Шаг 4) 1 нечетно; вычтите 1 и получите 0.
Ввод:
Выход:* 12

Ограничения:

  • 0^6

Идея:

Для решения этой проблемы нам просто нужно следовать инструкциям: мы можем определить, является ли число нечетным, используя по модулю 2 ; число % 2 равно 1 если число нечетно, в противном случае это 0 . В любое время, когда число нечетно, вычтите 1 из числа . В любое время, когда число четно, разделите число на 2 .

Пока мы это делаем, мы можем просто увеличить наш счетчик ( и ), а затем вернуть это когда-то число достигает 0 .

Код Javascript:

Лучший результат для приведенного ниже кода составляет 68 мс/37,1 МБ (превышает 99%/100%).

var numberOfSteps  = function(num) {
    let ans = 0
    for (; num; ans++)
        if (num % 2) num--
        else num /= 2
    return ans
};

Код Python:

Наилучший результат для приведенного ниже кода составляет 24 мс/14,1 МБ (превышает 96%/89%).

class Solution:
    def numberOfSteps (self, num: int) -> int:
        ans = 0
        while num > 0:
            if num % 2: num -= 1
            else: num /= 2
            ans += 1
        return ans

Java-код:

Лучший результат для приведенного ниже кода составляет 0 мс/35,5 МБ (превышает 100%/95%).

class Solution {
    public int numberOfSteps (int num) {
        int ans = 0;
        for (; num > 0; ans++)
            if (num % 2 == 1) num--;
            else num /= 2;
        return ans;
    }
}

Код на языке C++:

Наилучший результат для приведенного ниже кода – 0 мс/5,8 МБ (превышает 100%/85%).

class Solution {
public:
    int numberOfSteps (int num) {
        int ans = 0;
        for (; num > 0; ans++)
            if (num % 2 == 1) num--;
            else num /= 2;
        return ans;
    }
};

Решения Leetcode (Серия из 161 детали)

Оригинал: “https://dev.to/seanpgallivan/solution-number-of-steps-to-reduce-a-number-to-zero-5bbb”