-
Notifications
You must be signed in to change notification settings - Fork 0
/
412. Fizz Buzz
149 lines (108 loc) · 4.61 KB
/
412. Fizz Buzz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
Given an integer n, return a string array answer (1-indexed) where:
answer[i] == "FizzBuzz" if i is divisible by 3 and 5.
answer[i] == "Fizz" if i is divisible by 3.
answer[i] == "Buzz" if i is divisible by 5.
answer[i] == i (as a string) if none of the above conditions are true.
Example 1:
Input: n = 3
Output: ["1","2","Fizz"]
Example 2:
Input: n = 5
Output: ["1","2","Fizz","4","Buzz"]
Example 3:
Input: n = 15
Output: ["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]
Constraints:
1 <= n <= 104
给定一个整数 n,返回一个字符串数组 answer(从1开始索引),满足以下条件:
answer[i] == "FizzBuzz" 如果 i 可以同时被 3 和 5 整除。
answer[i] == "Fizz" 如果 i 可以被 3 整除。
answer[i] == "Buzz" 如果 i 可以被 5 整除。
answer[i] == i(作为字符串)如果上述条件均不成立。
例如:
输入: n = 3
输出: ["1","2","Fizz"]
输入: n = 5
输出: ["1","2","Fizz","4","Buzz"]
输入: n = 15
输出: ["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]
限制:
1 <= n <= 104
以下是 Java 代码实现:
这段代码实现了给定数字 n 后,将从 1 到 n 的每个数字转化为相应的字符串,满足以下条件:
如果数字能同时被 3 和 5 整除,将该数字转化为字符串 "FizzBuzz"。
如果数字只能被 3 整除,将该数字转化为字符串 "Fizz"。
如果数字只能被 5 整除,将该数字转化为字符串 "Buzz"。
如果数字既不能被 3 整除也不能被 5 整除,将该数字转化为字符串。
具体实现如下:
定义一个字符串类型的 List ans。
使用 for 循环遍历从 1 到 n 的每个数字。
判断当前数字是否能同时被 3 和 5 整除,如果能,将字符串 "FizzBuzz" 添加到 List 中。
如果数字只能被 3 整除,将字符串 "Fizz" 添加到 List 中。
如果数字只能被 5 整除,将字符串 "Buzz" 添加到 List 中。
如果数字既不能被 3 整除也不能被 5 整除,将数字转换为字符串并添加到 List 中。
返回 List ans。
该代码的时间复杂度为 O(n),空间复杂度为 O(1)。因为代码中只用了一个 List 来存储结果,不需要额外的空间。
以下是 Java 代码实现,增加了中文注释:
class Solution {
public List<String> fizzBuzz(int n) {
// 创建一个字符串类型的 List,用于存储结果
List<String> ans = new ArrayList<>();
// 遍历从 1 到 n 的每个数字
for (int i = 1; i <= n; i++) {
// 判断当前数字是否能同时被 3 和 5 整除,如果能,将字符串 "FizzBuzz" 添加到 List 中
if (i % 15 == 0) {
ans.add("FizzBuzz");
}
// 如果数字只能被 3 整除,将字符串 "Fizz" 添加到 List 中
else if (i % 3 == 0) {
ans.add("Fizz");
}
// 如果数字只能被 5 整除,将字符串 "Buzz" 添加到 List 中
else if (i % 5 == 0) {
ans.add("Buzz");
}
// 如果数字既不能被 3 整除也不能被 5 整除,将数字转换为字符串并添加到 List 中
else {
ans.add(String.valueOf(i));
}
}
// 返回结果 List
return ans;
}
}
best answer:
import java.util.*;
class Solution {
public List<String> fizzBuzz(int n) {
// 调用 FizzBuzzer 的构造函数创建一个新的实例并返回
return new FizzBuzzer(n);
}
// 声明一个内部类 FizzBuzzer,继承自 AbstractList 并实现 RandomAccess 接口
private static final class FizzBuzzer extends AbstractList<String> implements RandomAccess {
// FizzBuzzer 内部变量 size,表示 FizzBuzz 序列的长度
private final int size;
// FizzBuzzer 的构造函数,接收一个 int 类型的参数 n,表示 FizzBuzz 序列的长度
FizzBuzzer(int n) {
this.size = n;
}
// 实现 AbstractList 的 get() 方法,返回序列中第 i 个元素
public String get(int i) {
int n = i+1;
if( n%3 == 0) {
if( n%5 == 0) {
return "FizzBuzz";
}
return "Fizz";
}
if( n%5 == 0) {
return "Buzz";
}
return Integer.toString(n);
}
// 实现 AbstractList 的 size() 方法,返回序列的长度
public int size() {
return this.size;
}
}
}