题目:给你一个整数 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 (以字符串形式)如果上述条件全不满足。
思路:看到这个题目时,我在想这个单词是什么意思,就点了进来,看完题目后,我只有一个想法:简单题我要重拳出击,这个题实在是太友好了吧😄
直接定义一个string数组,循环一次,当i为3且为5的倍速时,就让这个位置为FizzBuzz,当i仅为3的倍数是就等于Fizz,当i为5的倍数时等于Buzz,其余的就为n即可,在这个简单的暴力想法下(话说应该也只有暴力解法吧),就有了如下代码:
vector<string> fizzBuzz(int n) {
static string answer[10000] = {0};
for(int i=0;i<n;i++){
if(i % 3 == 0 && i % 5 == 0) answer[i] = "FizzBuzz";
else if(i % 5 == 0) answer[i] = "Buzz";
else if(i % 3 == 0) answer[i] = "Fizz";
else answer[i] = i;
}
return answer;
}
emmm这个代码是错的,根本编译不了,我这个猪头,完全忘记 函数返回的时候,你定义函数是什么类型,就必须返回什么类型,所以出错,一定要记录下来,防止以后再出错误(天知道前段时间为复试复习c++都学了些什么)😟
基于上面的所想,修改代码后,得到如下正确代码:
vector<string> fizzBuzz(int n) {
vector<string> answer;
for(int i=1;i<=n;i++){
if(i % 3 == 0 && i % 5 == 0) answer.push_back("FizzBuzz");
else if(i % 5 == 0) answer.push_back("Buzz");
else if(i % 3 == 0) answer.push_back("Fizz");
else answer.push_back(to_string(i));
}
return answer;
}
可以看到我的执行时间是0ms,空间利用率也不错。
今日学到:
- vector是表示可变大小数组的序列容器。本身就是容器,不必画蛇添足的自定义数组。
- vector添加数据用push_back()方法。
- 函数返回的必须与函数定义类型一致。
总结:今天题目虽然简单,但是我还是写了一个小时,学会了很多,说明我还有很多需要学习的地方,继续加油😊