lintcode-簡單-Fizz Buzz問題,只用一個if語句
阿新 • • 發佈:2019-02-20
新人第一次寫文章,向分享一下自己的想法,如果有不對的地方請大家批評指正。
普通大學生一枚,學了點程式設計,平時有什麼困難也會到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; } };