412. 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"]
Constraints:
- 1 < = n < = 1 0 4 1 <= n <= 10^4 1<=n<=104
From: LeetCode
Link: 412. Fizz Buzz
Solution:
Ideas:
1. Memory Allocation:
- The function returns an array of strings, so we first allocate memory for the array result that will hold the strings.
- Each string requires memory allocation separately. Since the maximum string length is 8 characters (for "FizzBuzz") plus 1 for the null terminator (\0), we allocate space for each string using malloc(9 * sizeof(char)).
2. FizzBuzz Logic:
- For each number from 1 to n, we check:
- If the number is divisible by both 3 and 5, we assign "FizzBuzz".
- If it's divisible by only 3, we assign "Fizz".
- If it's divisible by only 5, we assign "Buzz".
- Otherwise, we convert the number to a string using snprintf and store it in the array.
3. Returning the Result:
- The function returns the result array, and the size of the array (n) is returned through the returnSize pointer.
- The main function demonstrates how to call this function and free the allocated memory properly.
Code:
c
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char** fizzBuzz(int n, int* returnSize) {
*returnSize = n;
char** result = (char**)malloc(n * sizeof(char*)); // Allocate memory for the result array
for (int i = 1; i <= n; i++) {
result[i - 1] = (char*)malloc(9 * sizeof(char)); // Allocate memory for each string (maximum length is 8 for "FizzBuzz" + 1 for '\0')
if (i % 3 == 0 && i % 5 == 0) {
strcpy(result[i - 1], "FizzBuzz");
} else if (i % 3 == 0) {
strcpy(result[i - 1], "Fizz");
} else if (i % 5 == 0) {
strcpy(result[i - 1], "Buzz");
} else {
snprintf(result[i - 1], 9, "%d", i); // Convert the integer to a string
}
}
return result;
}