Fizz Buzz
Описание задачи #
Дано целое число n
.
Напишите функцию, которая принимает в качестве параметра число n
и возвращает массив строк answer
, который формируется по следующим правилам:
answer[i] == "FizzBuzz"
, еслиi
делится одновременно на 3 и 5;answer[i] == "Fizz"
, еслиi
делится только на 3;answer[i] == "Buzz"
, еслиi
делится только на 5;answer[i] == i
, во всех остальных случаях.
Ограничения #
Значение n
находится в диапазоне от 1 до 104.
Примеры #
-
Входные данные:
3
Ответ:
["1","2","Fizz"]
-
Входные данные:
5
Ответ:
["1","2","Fizz","4","Buzz"]
-
Входные данные:
14
Ответ:
["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]
Решение #
Для решения задачи нужно запустить цикл от 1 до n
и на каждой итерации проверять 4 взаимоисключающих условия.
Если условие выполняется, то в результирующий массив добавляется соответсвующая строка.
Реализация #
-
package main import "strconv" func fizzBuzz(n int) []string { res := make([]string, n) for i := 1; i <= n; i++ { if i%3 == 0 && i%5 == 0 { res[i-1] = "FizzBuzz" } else if i%3 == 0 { res[i-1] = "Fizz" } else if i%5 == 0 { res[i-1] = "Buzz" } else { res[i-1] = strconv.Itoa(i) } } return res }
-
export const fizzBuzz = (n: number): string[] => { const res: string[] = [] for (let i = 1; i <= n; i++) { if (i % 3 == 0 && i % 5 == 0) { res.push("FizzBuzz") } else if (i % 3 == 0) { res.push("Fizz") } else if (i % 5 == 0) { res.push("Buzz") } else { res.push(String(i)) } } return res }
Оценка сложности #
По времени
Сложность по времени линейная — O(n)
, так как мы итерируемся от 1 до n
.
По памяти
Сложность по памяти константная — O(1)
, так как мы не создаем дополнительных переменных.