力扣 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

你可能感兴趣的:(算法,leetcode,算法,职场和发展)