本文已参与「新人创作礼」活动,一起开启掘金创作之路。
题目链接: leetcode.com/problems/fi…
1. 题目介绍(Fizz Buzz)
Given an integer n, return a string array answer (1-indexed) where:
【Translate】: 给定一个整数 n,返回一个字符串数组的答案(下标从1开始),其中:
- answer[i] == "FizzBuzz" if i is divisible by 3 and 5.(如果i能被3和5整除,则answer[i] == "FizzBuzz")
- answer[i] == "Fizz" if i is divisible by 3.(如果i能被3整除,则answer[i] == "Fizz")
- answer[i] == "Buzz" if i is divisible by 5.(如果i能被5整除,则answer[i] == "Buzz")
- answer[i] == i (as a string) if none of the above conditions are true.(如果以上都没有,则answer[i] == i )
测试用例:
约束:
2. 题解
2.1 if...else if...else
根据题目描述,我像大家应该都能很轻松的想到这不就是一个if...else if...else
判断嘛,我们先判断一下i
是否能被3和5整除,然后依次是否能被3整除,是否能被5整除,都不满足,else让其等于i,结束!(需要注意的一点就是i
是从1开始的)
class Solution {
public List<String> fizzBuzz(int n) {
List<String> answer = new ArrayList<>();
for(int i = 1; i <= n; i++){
if(i%3 == 0 && i%5 == 0){
answer.add("FizzBuzz");
}else if (i%3 == 0){
answer.add("Fizz");
}else if (i%5 == 0){
answer.add("Buzz");
}else{
answer.add(String.valueOf(i));
}
}
return answer;
}
}
2.2 if...if...if
该方法是讨论区Most Vote比较靠前的题解,它并没有使用if...else if的形式,而是将其都设成了if形式,优点是不需要再单独判断是否可以被3和5同时整除,缺点就是每次所有的都得判断。但最后,该方法的最好结果和上一解法的最好结果基本持平,当然在这种简单题中基本上也没什么可深挖的空间,没必要花费太多的时间来思考改进和优化。
public List<String> fizzBuzz(int n) {
List<String> answer = new ArrayList<>();
for (int i= 1; i <= n; i++) {
String current = "";
if (i % 3 == 0) {
current = "Fizz";
}
if (i % 5 == 0) {
current += "Buzz";
}
if (current.length() == 0) {
current = String.valueOf(i);
}
answer.add(current);
}
return answer;
}
3. 可参考
[1] Java集合-List