Easy

题目描述

给你一个整数 n ,返回一个字符串数组 answer (下标从 1 开始),其中:

  • answer[i] == "FizzBuzz" 如果 i 能被 3 和 5 整除。
  • answer[i] == "Fizz" 如果 i 能被 3 整除。
  • answer[i] == "Buzz" 如果 i 能被 5 整除。
  • answer[i] == i (以字符串形式)如果上述条件都不满足。

示例 1:

输入:n = 3
输出:["1","2","Fizz"]

示例 2:

输入:n = 5
输出:["1","2","Fizz","4","Buzz"]

示例 3:

输入:n = 15
输出:["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]

提示:

  • 1 <= n <= 10^4

解题思路

这是一个经典的编程题目,主要考查条件判断和字符串处理。

解题思路:

最直接的方法是遍历从 1 到 n 的所有数字,对每个数字按照题目要求进行判断:

  1. 首先判断是否能被 3 和 5 同时整除,如果可以则添加 “FizzBuzz”
  2. 如果只能被 3 整除,则添加 “Fizz”
  3. 如果只能被 5 整除,则添加 “Buzz”
  4. 如果都不能整除,则将数字转换为字符串添加

需要注意的是,判断顺序很重要,必须先判断能否被 3 和 5 同时整除,因为这个条件比单独被 3 或 5 整除更严格。

优化思路:

除了基本的条件判断法,还可以使用字符串拼接的方法:

  • 对每个数字,初始化一个空字符串
  • 如果能被 3 整除,就拼接 “Fizz”
  • 如果能被 5 整除,就拼接 “Buzz”
  • 如果最终字符串为空,说明不能被 3 或 5 整除,就使用数字本身

这种方法的优点是逻辑更清晰,易于扩展(比如增加新的整除条件)。

代码实现

class Solution {
public:
    vector<string> fizzBuzz(int n) {
        vector<string> result;
        for (int i = 1; i <= n; i++) {
            string curr = "";
            if (i % 3 == 0) curr += "Fizz";
            if (i % 5 == 0) curr += "Buzz";
            if (curr.empty()) curr = to_string(i);
            result.push_back(curr);
        }
        return result;
    }
};
class Solution:
    def fizzBuzz(self, n: int) -> List[str]:
        result = []
        for i in range(1, n + 1):
            curr = ""
            if i % 3 == 0:
                curr += "Fizz"
            if i % 5 == 0:
                curr += "Buzz"
            if not curr:
                curr = str(i)
            result.append(curr)
        return result
public class Solution {
    public IList<string> FizzBuzz(int n) {
        IList<string> result = new List<string>();
        for (int i = 1; i <= n; i++) {
            string curr = "";
            if (i % 3 == 0) curr += "Fizz";
            if (i % 5 == 0) curr += "Buzz";
            if (curr == "") curr = i.ToString();
            result.Add(curr);
        }
        return result;
    }
}
var fizzBuzz = function(n) {
    const result = [];
    for (let i = 1; i <= n; i++) {
        if (i % 3 === 0 && i % 5 === 0) {
            result.push("FizzBuzz");
        } else if (i % 3 === 0) {
            result.push("Fizz");
        } else if (i % 5 === 0) {
            result.push("Buzz");
        } else {
            result.push(i.toString());
        }
    }
    return result;
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(n)需要遍历从 1 到 n 的所有数字
空间复杂度O(1)除了输出数组外,只使用了常数级别的额外空间

相关题目