Решения 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”