LintCode 9. Fizz Buzz
Description
Given number
n
. Print number from1
ton
. But:
- when number is divided by
3
, printfizz
. - when number is divided by
5
, printbuzz
. - when number is divided by both
3
and5
, print"fizz buzz"
. - when number can’t be divided by either
3
or5
, print the numberitself
.
給你一個整數n. 從
1
到n
按照下面的規則打印每個數:
- 如果這個數被
3
整除,打印fizz
. - 如果這個數被
5
整除,打印buzz
. - 如果這個數同時被
3
和5
整除,打印fizz buzz
- 如果這個數既不能被3整除也不能被5整除,打印數字
本身
。
Example
比如n一個 = 15
,返回字符串數組:
[
"1", "2", "fizz","4", "buzz", "fizz", "7", "8", "fizz",
"buzz", "11", "fizz","13", "14", "fizz buzz"
]
Challenge
你是否可以只有一個if
來實現
Submission
1. if語句(最簡單,但是多個if)
class Solution {
public:
/*
* param n: As description.
* return: A list of strings.
*/
vector<string> fizzBuzz(int n) {
vector<string> results;
for (int i = 1; i <= n; i++) {
if (i % 15 == 0) {
results.push_back("fizz buzz");
} else if (i % 5 == 0) {
results.push_back("buzz");
} else if (i % 3 == 0) {
results.push_back("fizz");
} else {
results.push_back(to_string(i));
}
}
return results;
}
};
2. 不用if,找規律(符合挑戰要求)
以
n=34
爲例
- 被
3
整除的數依次爲:3,6,9,12,15,18,21,24,27,30,33 - 被
5
整除的數依次爲:5,10,15,20,25,30 - 被
3
和5
整除的數(即被15
整除的數):15,30
思路:
- 做4次for循環,依次對容器進行賦值覆蓋,足題意那麼被3和5整除的數最後覆蓋,即滿足題意。算法複雜度O(
O(n)+O(n/3)+O(n/5)+O(n/15)
)
class Solution {
public:
/**
* @param n: An integer
* @return: A list of strings.
*/
vector<string> fizzBuzz(int n) {
// write your code here
vector<string> res;
string tem;
for(int i = 1; i <= n; i++){
tem = to_string(i);
res.push_back(tem);
}
for(int i=1; i <= n/3; i++){
tem = "fizz";
res[i*3 - 1] = tem;
}
for(int i=1; i <= n/5; i++){
tem = "buzz";
res[i*5 - 1] = tem;
}
for(int i=1; i <= n/15; i++){
tem = "fizz buzz";
res[i*15 - 1] = tem;
}
return res;
}
};