做题博客链接
https://blog.csdn.net/qq_43349112/article/details/108542248
题目链接
https://leetcode-cn.com/problems/fizz-buzz/
描述
写一个程序,输出从 1 到 n 数字的字符串表示。
1. 如果 n 是3的倍数,输出“Fizz”;
2. 如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。
示例
示例:
n = 15,
返回:
[
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
"FizzBuzz"
]
初始代码模板
class Solution {
public List<String> fizzBuzz(int n) {
}
}
代码
推荐题解,虽然题目简单,但是题解还是有不少可以学习的东西:
https://leetcode-cn.com/problems/fizz-buzz/solution/fizz-buzz-by-leetcode/
模拟
class Solution {
public List<String> fizzBuzz(int n) {
List<String> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
if (i % 15 == 0) {
list.add("FizzBuzz");
} else if (i % 3 == 0) {
list.add("Fizz");
} else if (i % 5 == 0) {
list.add("Buzz");
} else {
list.add(String.valueOf(i));
}
}
return list;
}
}
散列表
仅以这个题目而言,这样做其实效率更低,但是如果判定逻辑复杂之后,这个方法更容易维护
class Solution {
public List<String> fizzBuzz(int n) {
Map<Integer, String> map = new HashMap<>(){
{
put(3, "Fizz");
put(5, "Buzz");
}
};
List<String> res = new LinkedList<>();
for (int i = 1; i <= n; i++) {
String str = "";
for (Map.Entry<Integer, String> entry : map.entrySet()) {
if (i % entry.getKey() == 0) {
str += entry.getValue();
}
}
if ("".equals(str)) {
str += i;
}
res.add(str);
}
return res;
}
}