题目描述
题干:
写一个程序,输出从 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"
]
题解思路
把数字变成字符串然后把除数是3或者5的特殊数字用字符串代替存储到一个List集合
无非就是这三种情况,而且还按照自然数排列,最好的方法无非是for循环加几个if else判断
这里就是需要把int型的数字存放到String的集合中,这里一共有三种办法
1. i + ""
2. String.valueOf(i)
3. Integer.toString(i)
还有List接口的三种常见的实现类,这里因为要多次插入新元素,所以我采用了方便插入的LinkedList实现类
正确代码
class Solution {
public List<String> fizzBuzz(int n) {
List<String> strings = new LinkedList<>();
for (int i = 1; i <= n; i++) {
if (i % 3 == 0 && i % 5 == 0){
strings.add("FizzBuzz");
}else if(i % 3 ==0 && i % 5 != 0){
strings.add("Fizz");
}else if(i % 3 !=0 && i % 5 == 0){
strings.add("Buzz");
}else {
strings.add(String.valueOf(i));
}
}
return strings;
}
}
总结
这里总结以下List接口,List是继承Collection接口,常用的实现类有ArrayList、LinkedList和Vector
区别:
ArrayList,底层是动态数组,可以动态的增加数组大小,查找方便,增删改不方便,线程不安全
LinkedList,底层是双向链表,增删改方便,查找不方便,线程也是不安全
Vector,底层也是动态数组,不过扩容方式和ArrayList不同,线程安全,他还有一个子类Stack,效率较低
如果文章存在问题或者存在更好的题解,欢迎在评论区斧正和评论,各自努力,你我最高处见