LeetCode //C - 412. Fizz Buzz

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;
}
相关推荐
能工智人小辰10 分钟前
Codeforces Round 509 (Div. 2) C. Coffee Break
c语言·c++·算法
kingmax5421200810 分钟前
CCF GESP202503 Grade4-B4263 [GESP202503 四级] 荒地开垦
数据结构·算法
岁忧15 分钟前
LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上
sql·算法·leetcode
eachin_z1 小时前
力扣刷题(第四十九天)
算法·leetcode·职场和发展
闻缺陷则喜何志丹1 小时前
【强连通分量 缩点 拓扑排序】P3387 【模板】缩点|普及+
c++·算法·拓扑排序·洛谷·强连通分量·缩点
机器学习之心2 小时前
机器学习用于算法交易(Matlab实现)
算法·机器学习·matlab
AL流云。2 小时前
【优选算法】C++滑动窗口
数据结构·c++·算法
qq_429879673 小时前
省略号和可变参数模板
开发语言·c++·算法
飞川撸码4 小时前
【LeetCode 热题100】网格路径类 DP 系列题:不同路径 & 最小路径和(力扣62 / 64 )(Go语言版)
算法·leetcode·golang·动态规划
Neil今天也要学习4 小时前
永磁同步电机参数辨识算法--IPMSM拓展卡尔曼滤波全参数辨识
单片机·嵌入式硬件·算法