PRO

Напишите FizzBuzz

FizzBuzz — классическая задача: для чисел от 1 до n нужно вывести FizzBuzz, если число делится на 3 и 5, Fizz, если делится только на 3, Buzz, если делится только на 5, иначе само число.
Подробный ответ

Условие задачи

Для чисел от 1 до n:

  • если число делится и на 3, и на 5 — вывести FizzBuzz;

  • если число делится только на 3 — вывести Fizz;

  • если число делится только на 5 — вывести Buzz;

  • иначе вывести само число.

Решение

def fizz_buzz(n: int) -> list[str]:
    result = []

    for number in range(1, n + 1):
        if number % 15 == 0:
            result.append('FizzBuzz')
        elif number % 3 == 0:
            result.append('Fizz')
        elif number % 5 == 0:
            result.append('Buzz')
        else:
            result.append(str(number))

    return result

Пример использования

print(fizz_buzz(15))
# ['1', '2', 'Fizz', '4', 'Buzz', 'Fizz', '7', '8', 'Fizz', 'Buzz', '11', 'Fizz', '13', '14', 'FizzBuzz']

Почему FizzBuzz проверяют первым

Проверку делимости на 3 и 5 нужно выполнять до отдельных проверок на 3 и 5. Иначе число 15 попадёт в ветку number % 3 == 0 и функция вернёт Fizz вместо FizzBuzz.

Альтернативный вариант

def fizz_buzz(n: int) -> list[str]:
    result = []

    for number in range(1, n + 1):
        value = ''

        if number % 3 == 0:
            value += 'Fizz'
        if number % 5 == 0:
            value += 'Buzz'

        result.append(value or str(number))

    return result

Сложность

Алгоритм делает один проход от 1 до n, поэтому временная сложность равна O(n). Если сохранять все результаты в список, дополнительная память также равна O(n); если сразу печатать значения, дополнительная память будет O(1).

Как ответить на собеседовании

Я прохожу числа от 1 до n и сначала проверяю делимость на 15, затем на 3 и 5. Проверка на 15 должна идти первой, чтобы для числа 15 вернулся FizzBuzz. Решение выполняется за O(n).

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге