1. 程式人生 > >lintcode-簡單-Fizz Buzz問題,只用一個if語句

lintcode-簡單-Fizz Buzz問題,只用一個if語句

新人第一次寫文章,向分享一下自己的想法,如果有不對的地方請大家批評指正。

普通大學生一枚,學了點程式設計,平時有什麼困難也會到CSDN搜尋一下,基本問題都能找到解決方案,可以說這個平臺在我的學習生活中起到了不可或缺的作用。在師兄師姐的推薦下,接觸了lintcode,開始刷上面的題,有時候真的想不出只能上網搜答案,有時候自己勉強做出來,也會搜一下,看看自己與高手之間思路的差距,總是受益良多。

今天做了一個Fizz Buzz問題,一開始覺得挺簡單,就是判斷一個數是不是3或者5的倍數,後來一看,有要求:用一個if語句完成,瞬間陷入了僵局,去網上一找,python的解決方法倒是有,最牛的可以一句話解決,那我用C++怎麼辦呢?

只能用一個if語句,所以不能是先判斷再填字元,應該要先在每個位置把字元填進去,然後遇到3的倍數把數字改了,改成fizz,3的倍數改完去改5的倍數,這時候就需要判斷一下這個5的倍數是否同時也是3的倍數是的話就在後面補一個單詞,不是就改。按著這樣的思路試了一下:

class Solution {
public:
    /*
     * @param n: An integer
     * @return: A list of strings.
     */
    vector<string> fizzBuzz(int n) {
        // write your code here
        vector<string> temp;
        string str;
        
        for(int i=1;i<=n;++i)
        {
            stringstream ss;
            ss<<i;
            str=ss.str();
            temp.push_back(str);
        }
        for(int j=1;(3*j)<=n;++j)
        {
            temp[3*j-1]="fizz";
        }
        for(int k=1;(5*k)<=n;++k)
        {
            if(5*k%3==0)
            {
                temp[5*k-1]=temp[5*k-1]+" "+"buzz";
            }
            else
            {
                temp[5*k-1]="buzz";
            }
        }
        return temp;
    }
};
居然成功通過了,感覺挺開心的,以前做題都是參考了別人的思路,第一次自己做出來,看網上也沒有類似的,想把自己的想法分享給大家,因為是新手,所以寫的可能很不規範,語言上可能也不夠精煉。希望能夠給有需要的同學一點思路上的幫助。不知道這個簡單的小問題應該屬於什麼分類,就隨便選了一個。