【快乐水题】412. Fizz Buzz
生活随笔
收集整理的这篇文章主要介绍了
【快乐水题】412. Fizz Buzz
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
原题:
力扣链接:412. Fizz Buzz
题目简述:
给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:
- answer[i] == “FizzBuzz” 如果 i 同时是 3 和 5 的倍数。
- answer[i] == “Fizz” 如果 i 是 3 的倍数。
- answer[i] == “Buzz” 如果 i 是 5 的倍数。
- answer[i] == i 如果上述条件全不满足。
解题思路
1.难点在动态生成二维字符串数组(本题解提供两种生成方法(连续内存与非连续内存),都可用);
2.*returnSize = n; ///< 这个比较坑。二维数组输出字符串的个数n。如写成malloc的大小,就报错
3.利用sprintf来把int转char数组:sprintf(pps8Output[i - 1],"%d", i);
4.其他没啥了。。。
C代码:
/*** Note: The returned array must be malloced, assume caller calls free().*/ char** fizzBuzz(int n, int* returnSize) {int i = 0;*returnSize = n; ///< 这个比较坑。二维数组输出字符串的个数n。如写成malloc的大小,就报错///< 动态开辟二维数组 start///< 法1///< 申请可能非连续内存// char ** pps8Output = malloc(sizeof(char *)*n); ///< 一级指针// for(i = 0;i < n; i++)// {// pps8Output[i] = malloc(10*sizeof(char)); ///< 二级指针// }///< 法2///< 申请连续内存char ** pps8Output = malloc(sizeof(char *)*n); ///< 一级指针pps8Output[0] = malloc(10*n*sizeof(char)); ///< 二级指针for(i = 1;i < n; i++){///< 一次性动态申请好全部的内存,然后计算每行的开始地址,用单个下标访问,进行赋值pps8Output[i] = pps8Output[0] + i*10; ///< 二级指针 }///< 动态开辟二维数组 endfor (i = 1; i <= n; i++){if ((i % 3 == 0) && (i % 5 == 0)){strcpy(pps8Output[i - 1], "FizzBuzz");}else if ((i % 3 == 0) && !(i % 5 == 0)){strcpy(pps8Output[i - 1], "Fizz");}else if (!(i % 3 == 0) && (i % 5 == 0)){strcpy(pps8Output[i - 1], "Buzz");}else{sprintf(pps8Output[i - 1],"%d", i);}}// for (i = 0; i < n ; i++)// {// printf("%s\r\n", pps8Output[i]);// }return pps8Output; }力扣结果展示:
总结
以上是生活随笔为你收集整理的【快乐水题】412. Fizz Buzz的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 分享一些看了就能用的面试技巧
- 下一篇: 2020年中国工业品B2B行业研究报告