LeetCode算法題-Fizz Buzz(Java實現)


這是悅樂書的第221次更新,第233篇原創

01 看題和准備

今天介紹的是LeetCode算法題中Easy級別的第88題(順位題號是412)。

編寫一個程序,輸出從1到n的數字的字符串表示。但對於三的倍數,它應輸出“Fizz”而不是數字,對於五的倍數,應該輸出“Buzz”。 對於三和五共同的倍數,應輸出“FizzBuzz”。例如:

輸入:n = 15
輸出:["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。

02 第一種解法

將n轉為對應的字符串,分為三種情況:

1、是3或者5的倍數,那么n轉為"Fizz"或者"Buzz"。

2、是3和5的共同倍數,那么n轉為"FizzBuzz"。

3、不是前兩種情況,那么n直接轉為字符串。

因此,直接使用取余,判斷余數是否為0,來分別對應上述三種情況,將對應的字符串添加進list中即可。

此解法時間復雜度為O(n),空間復雜度為O(1)。

public List<String> fizzBuzz(int n) {
    List<String> list = new ArrayList<String>();
    for (int i=1; i<= n; i++) {
        if (i%3 != 0) {
            if (i%5 != 0) {
                list.add(i+"");
            } else {
                list.add("Buzz");
            }
        } else {
            if (i%5 != 0) {
                list.add("Fizz");
            } else {
                list.add("FizzBuzz");
            }
        }
    }
    return list;
}

03 第二種解法

在第一種解法里,我們分析了三種需要判斷的情況,對於第二種情況,可以直接用n對15取余來判斷。

此解法時間復雜度為O(n),空間復雜度為O(1)。

public List<String> fizzBuzz2(int n) {
    List<String> list = new ArrayList<String>();
    for (int i = 1; i <= n; i++) {
        if (i % 15 == 0) {
            list.add("FizzBuzz");
        } else if (i % 3 == 0) {
            list.add("Fizz");
        } else if (i % 5 == 0) {
            list.add("Buzz");
        } else {
            list.add(i+"");
        }
    }
    return list;
}

04 第三種解法

使用兩個變量計數(也可以理解為雙指針),替換取余算法。

當某一變量等於3或者5時,將其所代表的Fizz或者Buzz字符串添加進list,然后變量歸零。當一變量等於3,且另一變量等於5時,將FizzBuzz添加進list,然后兩變量同時歸零。

此解法時間復雜度為O(n),空間復雜度為O(1)。

public List<String> fizzBuzz3(int n) {
    List<String> list = new ArrayList<String>();
    int Fizz = 0, Buzz = 0;
    for (int i = 1; i <= n; i++) {
        Fizz++;
        Buzz++;
        if (Fizz == 3 && Buzz == 5) {
            list.add("FizzBuzz");
            Fizz = 0;
            Buzz = 0;
        } else if(Fizz == 3) {
            list.add("Fizz");
            Fizz = 0;
        } else if(Buzz == 5) {
            list.add("Buzz");
            Buzz = 0;
        } else {
            list.add(i+"");
        }
    }
    return list;
}

05 小結

算法專題目前已連續日更超過兩個月,算法題文章88+篇,公眾號對話框回復【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是全部內容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM