Fizz Buzz
Given an integer n, return a string array answer (1-indexed) where:
answer[i] == "FizzBuzz" if i is divisible by 3 and 5.
answer[i] == "Fizz" if i is divisible by 3.
answer[i] == "Buzz" if i is divisible by 5.
answer[i] == i (as a string) if none of the above conditions are true.
Example 1:
Input: n = 3
Output: ["1","2","Fizz"]
Example 2:
Input: n = 5
Output: ["1","2","Fizz","4","Buzz"]
Example 3:
Input: n = 15
Output: ["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]
Solution
Simple loop solution
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
vector<string> fizzBuzz(int n) {
vector<string> out = {};
for (int i = 0; i < n; ++i) {
out.push_back("");
if ((i+1) % 3 == 0) {
out[i] += "Fizz";
}
if ((i+1) % 5 == 0) {
out[i] += "Buzz";
continue;
}
if (out[i] == "") {
out[i] = to_string(i+1);
}
}
return out;
}
};Optimized solution
Simple is best, instead of initialising out[i] just push_back() in the if cases and it is much faster.
class Solution {
public:
vector<string> fizzBuzz(int n) {
vector<string>v;
for(int i=1;i<=n;i++){
if ((i%3==0) && (i%5==0)){
v.push_back("FizzBuzz");
}else if(i%3==0){
v.push_back("Fizz");
}else if(i%5==0){
v.push_back("Buzz");
}else{
v.push_back(to_string(i));
}
}
return v;
}
};