题目描述
写一个程序,输出从 1 到 n 数字的字符串表示。
1.如果 n 是3的倍数,输出“Fizz”;
2. 如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”
解题思路
思路1
对1到n范围内的数进行遍历,并对每个遍历到的数字number进行条件判断:
- 如果number % 3 = 0 但 number % 5 != 0,列表新增元素”Fizz”;
- 如果number % 5 = 0 但 number % 3 != 0,列表新增元素”Buzz”;
- 如果number % 3 = 0 且 number % 5 = 0,列表新增元素”FizzBuzz”;
- 如果以上条件均不满足,则列表新增元素 i (转变成字符串形式) 。
思路2
借助额外的StringBuffer类型的变量strbuf,以减少对判断条件的依赖性,因为当判断条件过多时,思路1的编程是很麻烦的。
- 如果number % 3 = 0 ,strbuf追加”Fizz”串;
- 这之后,如果number % 5 = 0 ,strbuf追加”Buzz”串;
- 然后,如果strbuf是空串的话,就追加 i 的字符串形式
- 每次将strbuf的字符串形式(即strbuf.toString())作为新元素,添加到结果列表中,并清空strbuf,用于下一次的判定追加。
这样做的好处是减少了对判断条件的依赖性,当判断题目过多时减少代码量。
代码(Java)
思路1代码
class Solution {
public List<String> fizzBuzz(int n) {
List<String> res = new ArrayList<String>();
for (int i = 1; i <= n; i++){
if (i % 3 == 0 && i % 5 != 0){
res.add("Fizz");
}else if (i % 5 == 0 && i % 3 != 0){
res.add("Buzz");
}else if (i % 3 == 0 && i % 5 == 0){
res.add("FizzBuzz");
}else {
res.add(i + "");
}
}
return res;
}
}
思路2代码
public class Solution {
public List<String> fizzBuzz(int n){
List<String> res = new ArrayList<String>();
StringBuffer strbuf = new StringBuffer();
for (int i = 1; i <= n; i++){
if (i % 3 == 0){
strbuf.append("Fizz");
}
if (i % 5 == 0){
strbuf.append("Buzz");
}
if (strbuf.toString().equals("")){
strbuf.append(i + "");
}
res.add(strbuf.toString());
strbuf.delete(0,strbuf.length());
}
return res;
}
}
本文作者:
whtli
本文链接: https://hexo.whtli.cn/archives/3f5518c6.html
版权声明: 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
本文链接: https://hexo.whtli.cn/archives/3f5518c6.html
版权声明: 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。