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 的所有数字,对每个数字按照题目要求进行判断:
- 首先判断是否能被 3 和 5 同时整除,如果可以则添加 “FizzBuzz”
- 如果只能被 3 整除,则添加 “Fizz”
- 如果只能被 5 整除,则添加 “Buzz”
- 如果都不能整除,则将数字转换为字符串添加
需要注意的是,判断顺序很重要,必须先判断能否被 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) | 除了输出数组外,只使用了常数级别的额外空间 |
相关题目
. Fizz Buzz Multithreaded (Medium)