題目描述
寫一個程序,輸出從 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;
}
}