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;
    }
};