力扣 412. Fizz Buzz

目录

第一站 LeetCode 新手村

前言

412. Fizz Buzz

题目描述

解题思路

代码

总结

题目来源


第一站 LeetCode 新手村


前言

最近玩OJ赛,发现对算法的理解还需要更加扎实,code能力还可以进一步提升,所以做这样一个算法的系列文章,用于记录学习心得,交流经验,更好地进步和成长。 


题目描述

给你一个整数 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

输入:n = 3
输出:["1","2","Fizz"]

示例 2

输入:n = 5
输出:["1","2","Fizz","4","Buzz"]

 示例 3

输入:n = 15
输出:["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]

提示

  • 1 <= n <= 104

解题思路

预知

LeetCode是核心代码模式,所以只需要考虑核心算法,输入由系统自动完成,最后的输出以return返回;

思路

从1~n,遍历提取3的倍数,5的倍数即可,对于不是二者的倍数,返回对应的数字即可,巧妙的思路详解请参考代码注释,注释以“FizzBuzz”的输出为例;

重点

在C++11中emplace_backpush_back更加高效,因为调用 构造函数 原地构造,不需要触发拷贝构造和移动构造;

代码

C++

class Solution {
public:vector fizzBuzz(int n) {vector answer;for(int i=1;i<=n;i++){string ans;              //临时字符串ans每次清空 用以存储该次循环的字符串if(i%3==0){ans += "Fizz";       //因为"FizzBuzz"字符串中,Fizz在前,所以先计算是否是3的倍数}                        if(i%5==0){              //字符串拼接的过程中会直接相加中间无其他字符,若同时是5的倍数ans += "Buzz";       //ans = "FizzBuzz" }if(ans.size()==0){       //ans不为空,不进入ans += to_string(i);}answer.emplace_back(ans); //emplace_back比push_back更加高效}                             //因为调用 构造函数 原地构造,不需要触发拷贝构造和移动构造return answer;}
};

Python3 

class Solution:def fizzBuzz(self, n: int) -> List[str]:result = []for i in range(1, n+1):ans=''if i%3==0:ans += "Fizz"if i%5 == 0:ans+= "Buzz"if len(ans)==0:ans += str(i)result.append(ans)return result


总结

以上就是今天要讲的内容,本文仅仅简单讲解了《Fizz Buzz》这一题目,对C++ 中emplace_back和push_back进行了对比,学会了更加高效的向vector容器添加元素的方法。

题目来源

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/fizz-buzz


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部