题目描述:
给你一个整数 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 (以字符串形式)如果上述条件全不满足。
解题思路:
这题本身很简单,只是没有给存储字符串的空间要自己malloc,而且连字符串空间也要malloc。
利用for循环,根据取余结果,输出不同字符串即可
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char ** fizzBuzz(int n, int* returnSize){
*returnSize=n;
int i=0;
char *arr=(char*)malloc(sizeof(char)*9*n);//创建能够存储字符的字符串,9是因为最大也就FizzBuzz+'\0'
char **string=(char**)malloc(sizeof(char*)*n);//创建指向字符串的字符串指针,也就相当于创建了字符串数组
for(i=0;i<n;i++)
{
string[i]=&arr[9*i];//给字符串数组指定空间
}
for(i=1;i<=n;i++)
{
if(i%3==0&i%5==0)strcpy(string[i-1],"FizzBuzz");
else if(i%3==0)strcpy(string[i-1],"Fizz");
else if(i%5==0)strcpy(string[i-1],"Buzz");
else sprintf(string[i-1],"%d",i);
}
return string;
}
涉及到的 strcpy() 字符串拷贝函数 可以参考 《C Primer Plus》 P301