【快乐水题】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行业研究报告