LeetCode精選TOP面試題412. Fizz Buzz

題目描述

寫一個程序,輸出從 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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章