LeetCode 412: Fizz Buzz (Modulus Rules Simulation)
LeetCode 412MathSimulationToday we solve LeetCode 412 - Fizz Buzz.
Source: https://leetcode.com/problems/fizz-buzz/
English
Problem Summary
Given an integer n, return a string array from 1 to n where each position follows rules: multiples of 3 become Fizz, multiples of 5 become Buzz, and multiples of both become FizzBuzz.
Key Insight
The only subtle part is rule priority: check divisibility by both 3 and 5 first (i.e., 15), otherwise values like 15 would be incorrectly mapped to only Fizz or Buzz.
Algorithm
1) Create an output list.
2) For each integer i from 1 to n:
- if i % 15 == 0, append "FizzBuzz"
- else if i % 3 == 0, append "Fizz"
- else if i % 5 == 0, append "Buzz"
- else append String.valueOf(i) (or equivalent).
3) Return the list.
Complexity
Time: O(n).
Space: O(n) (for output).
Reference Implementations (Java / Go / C++ / Python / JavaScript)
class Solution {
public List<String> fizzBuzz(int n) {
List<String> ans = new ArrayList<>();
for (int i = 1; i <= n; i++) {
if (i % 15 == 0) {
ans.add("FizzBuzz");
} else if (i % 3 == 0) {
ans.add("Fizz");
} else if (i % 5 == 0) {
ans.add("Buzz");
} else {
ans.add(String.valueOf(i));
}
}
return ans;
}
}func fizzBuzz(n int) []string {
ans := make([]string, 0, n)
for i := 1; i <= n; i++ {
if i%15 == 0 {
ans = append(ans, "FizzBuzz")
} else if i%3 == 0 {
ans = append(ans, "Fizz")
} else if i%5 == 0 {
ans = append(ans, "Buzz")
} else {
ans = append(ans, strconv.Itoa(i))
}
}
return ans
}class Solution {
public:
vector<string> fizzBuzz(int n) {
vector<string> ans;
ans.reserve(n);
for (int i = 1; i <= n; i++) {
if (i % 15 == 0) {
ans.push_back("FizzBuzz");
} else if (i % 3 == 0) {
ans.push_back("Fizz");
} else if (i % 5 == 0) {
ans.push_back("Buzz");
} else {
ans.push_back(to_string(i));
}
}
return ans;
}
};class Solution:
def fizzBuzz(self, n: int) -> list[str]:
ans = []
for i in range(1, n + 1):
if i % 15 == 0:
ans.append("FizzBuzz")
elif i % 3 == 0:
ans.append("Fizz")
elif i % 5 == 0:
ans.append("Buzz")
else:
ans.append(str(i))
return ans/**
* @param {number} n
* @return {string[]}
*/
var fizzBuzz = function(n) {
const ans = [];
for (let i = 1; i <= n; i++) {
if (i % 15 === 0) {
ans.push("FizzBuzz");
} else if (i % 3 === 0) {
ans.push("Fizz");
} else if (i % 5 === 0) {
ans.push("Buzz");
} else {
ans.push(String(i));
}
}
return ans;
};中文
题目概述
给定整数 n,返回从 1 到 n 的字符串数组:3 的倍数写 Fizz,5 的倍数写 Buzz,同时是 3 和 5 的倍数写 FizzBuzz。
核心思路
关键在规则顺序:必须先判断 15 的倍数,再判断 3 或 5,否则 15 会被提前匹配成 Fizz 或 Buzz。
算法步骤
1)初始化结果数组。
2)遍历 i = 1..n:
- 若 i % 15 == 0,加入 "FizzBuzz";
- 否则若 i % 3 == 0,加入 "Fizz";
- 否则若 i % 5 == 0,加入 "Buzz";
- 否则加入数字字符串。
3)返回结果。
复杂度分析
时间复杂度:O(n)。
空间复杂度:O(n)(结果数组)。
多语言参考实现(Java / Go / C++ / Python / JavaScript)
class Solution {
public List<String> fizzBuzz(int n) {
List<String> ans = new ArrayList<>();
for (int i = 1; i <= n; i++) {
if (i % 15 == 0) {
ans.add("FizzBuzz");
} else if (i % 3 == 0) {
ans.add("Fizz");
} else if (i % 5 == 0) {
ans.add("Buzz");
} else {
ans.add(String.valueOf(i));
}
}
return ans;
}
}func fizzBuzz(n int) []string {
ans := make([]string, 0, n)
for i := 1; i <= n; i++ {
if i%15 == 0 {
ans = append(ans, "FizzBuzz")
} else if i%3 == 0 {
ans = append(ans, "Fizz")
} else if i%5 == 0 {
ans = append(ans, "Buzz")
} else {
ans = append(ans, strconv.Itoa(i))
}
}
return ans
}class Solution {
public:
vector<string> fizzBuzz(int n) {
vector<string> ans;
ans.reserve(n);
for (int i = 1; i <= n; i++) {
if (i % 15 == 0) {
ans.push_back("FizzBuzz");
} else if (i % 3 == 0) {
ans.push_back("Fizz");
} else if (i % 5 == 0) {
ans.push_back("Buzz");
} else {
ans.push_back(to_string(i));
}
}
return ans;
}
};class Solution:
def fizzBuzz(self, n: int) -> list[str]:
ans = []
for i in range(1, n + 1):
if i % 15 == 0:
ans.append("FizzBuzz")
elif i % 3 == 0:
ans.append("Fizz")
elif i % 5 == 0:
ans.append("Buzz")
else:
ans.append(str(i))
return ans/**
* @param {number} n
* @return {string[]}
*/
var fizzBuzz = function(n) {
const ans = [];
for (let i = 1; i <= n; i++) {
if (i % 15 === 0) {
ans.push("FizzBuzz");
} else if (i % 3 === 0) {
ans.push("Fizz");
} else if (i % 5 === 0) {
ans.push("Buzz");
} else {
ans.push(String(i));
}
}
return ans;
};
Comments