LeetCode题练习与总结:Fizz Buzz--412
一、题目描述
给你一个整数 n
,找出从 1
到 n
各个整数的 Fizz Buzz 表示,并用字符串数组 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"添加到列表中。
- 如果以上条件都不满足,则将整数转换为字符串并添加到列表中。
- 最后返回列表。
三、具体代码
import java.util.ArrayList;
import java.util.List;
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;
}
}
这段代码定义了一个名为Solution
的类和一个名为fizzBuzz
的方法,该方法接收一个整数n
并返回一个字符串列表,其中包含了从1到n的每个整数的Fizz Buzz表示。
四、时间复杂度和空间复杂度
1. 时间复杂度
- 我们有一个从1到n的循环,这个循环会执行n次。
- 在循环内部,我们进行了一系列的判断操作,这些操作都是常数时间操作(O(1))。
- 因此,总的时间复杂度是循环次数乘以每次循环的操作数,即O(n)。
2. 空间复杂度
- 我们创建了一个列表
answer
来存储结果,这个列表的大小与输入n成正比。 - 在最坏的情况下,即n最大时,列表
answer
将包含n个元素。 - 因此,空间复杂度是O(n),因为我们使用了与输入大小成线性关系的额外空间。
五、总结知识点
-
类定义:
class
关键字用于定义一个类。Solution
是类的名称。
-
方法定义:
public
关键字表示方法的访问修饰符,表示该方法可以被任何其他类访问。List<String>
表示该方法返回一个字符串列表。fizzBuzz
是方法的名称。int n
表示方法接收一个整数类型的参数n
。
-
集合框架:
List
接口用于表示一个有序集合,可以包含重复的元素。ArrayList
类实现了List
接口,提供了可调整大小的数组实现。
-
创建对象:
new ArrayList<>()
用于创建一个ArrayList
对象的实例。
-
循环结构:
for
循环用于重复执行一段代码块指定的次数。
-
条件判断:
if
,else if
, 和else
关键字用于基于条件执行不同的代码块。%
是取模运算符,用于判断一个数是否能被另一个数整除。
-
字符串操作:
String.valueOf(i)
是一个静态方法,用于将基本数据类型转换为字符串。
-
列表操作:
add
方法用于向列表中添加元素。
-
返回值:
return
关键字用于从方法中返回一个值。
-
整型变量:
int
是 Java 中的基本数据类型,用于表示整数。
以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。