412. Fizz Buzz
题目描述
输入一个整数 n,返回长度为 n 的字符串数组 answer。这里按 1 开始编号,第 i 项对应整数 i(1 <= i <= n)。
第 i 项的取值规则:i 能被 3 和 5 同时整除时为 "FizzBuzz";只能被 3 整除时为 "Fizz";只能被 5 整除时为 "Buzz";都不能整除时为 i 本身的十进制字符串。
示例 1
输入:n = 3 输出:["1","2","Fizz"]
示例 2
输入:n = 5 输出:["1","2","Fizz","4","Buzz"]
解释:第 3 项为 "Fizz",第 5 项为 "Buzz"。
示例 3
输入:n = 15 输出:["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]
解释:15 同时是 3 和 5 的倍数,所以最后一项为 "FizzBuzz"。
数据范围
1 <= n <= 10^4
解题思路
对每个 i 从空串开始拼接:能被 3 整除就加 "Fizz",能被 5 整除就加 "Buzz"。同时整除时自然得到 "FizzBuzz",不需要单独判断 15;都不整除时串为空,就用数字本身。
为什么正确
处理完 i 后,ans 恰好包含 1..i 的结果。
复杂度分析
时间 O(n);空间 O(1)(不计输出)。
易错点
用 if / elif 写时必须先判断 15,否则 15 会被 "Fizz" 分支截走;下标从 1 开始,循环要包含 n。
参考代码
Python、Java、C++、Go、JavaScript、TypeScript 六种语言,逻辑一致。
class Solution:
def fizzBuzz(self, n: int) -> List[str]:
ans = []
for i in range(1, n + 1):
s = ''
if i % 3 == 0:
s += 'Fizz'
if i % 5 == 0:
s += 'Buzz'
ans.append(s or str(i))
return ansclass Solution {
public List<String> fizzBuzz(int n) {
List<String> ans = new ArrayList<>();
for (int i = 1; i <= n; i++) {
String s = "";
if (i % 3 == 0) {
s += "Fizz";
}
if (i % 5 == 0) {
s += "Buzz";
}
ans.add(s.isEmpty() ? String.valueOf(i) : s);
}
return ans;
}
}class Solution {
public:
vector<string> fizzBuzz(int n) {
vector<string> ans;
for (int i = 1; i <= n; i++) {
string s;
if (i % 3 == 0) {
s += "Fizz";
}
if (i % 5 == 0) {
s += "Buzz";
}
ans.push_back(s.empty() ? to_string(i) : s);
}
return ans;
}
};func fizzBuzz(n int) []string {
ans := []string{}
for i := 1; i <= n; i++ {
s := ""
if i%3 == 0 {
s += "Fizz"
}
if i%5 == 0 {
s += "Buzz"
}
if s == "" {
s = strconv.Itoa(i)
}
ans = append(ans, s)
}
return ans
}var fizzBuzz = function(n) {
const ans = [];
for (let i = 1; i <= n; i++) {
let s = '';
if (i % 3 === 0) {
s += 'Fizz';
}
if (i % 5 === 0) {
s += 'Buzz';
}
ans.push(s || String(i));
}
return ans;
};function fizzBuzz(n: number): string[] {
const ans: string[] = [];
for (let i = 1; i <= n; i++) {
let s = '';
if (i % 3 === 0) {
s += 'Fizz';
}
if (i % 5 === 0) {
s += 'Buzz';
}
ans.push(s || String(i));
}
return ans;
}