LeetCode :【Easy】412. Fizz Buzz

Write a program that outputs the string representation of numbers from 1 to n.

But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output “Buzz”. For numbers which are multiples of both three and five output “FizzBuzz”.

- My train of thought:

这个题目看起来特别简单,不过脑子一样5分钟写完,直接看我的笨蛋解法好了。

#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main()
{
    int n;
    vector<string>output;
    string s;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        s=to_string(i);
        if(i%3==0&&i%5!=0)
            output.push_back("Fizz");
        else if(i%5==0&&i%3!=0)
            output.push_back("Buzz");
        else if(i%3==0&&i%5==0)
            output.push_back("FizzBuzz");
        else output.push_back(s);
    }
    for(vector<string>::iterator iter=output.begin();iter!=output.end();++iter)
    {
        cout<<*iter<<endl;
    }
} 

这个解法实在是没什么好讲的,不过to_string()这个C11的新特性非常好用,可以方便的转换数字为字符串。
但前提是你的编译器要支持GCC-4.7及以上版本。很不巧的是我一直在用的DEV-CPP只有GCC-4.6.2, 于是乎,我先是下载了GCC-5.01准备自己安装上去,结果好像有点点麻烦,就放弃了,直接去下载了DEV-CPP 5.11 with GCC-4.9.2(下载地址:https://sourceforge.net/projects/orwelldevcpp/files/?source=navbar),安装完之后,记得右上角要勾选gcc-4.9.2
这里写图片描述
还有一小步不能忘,单击,工具->编译选项,如图所示,勾选“编译时加入以下命令”,然后复制粘贴“-std=c++11”
这里写图片描述
这个解法乍一看问题不大,但是足足跑了9ms(your runtime beats 4.26% of cpp submissions)非常悲剧,还是看一下优解吧。

- Better solution

class Solution {
public:
    vector<string> fizzBuzz(int n) {
    vector<string>output(n);
    for(int i=1;i<=n;i++)
    {
        if(i%3==0)
            output[i-1]+=string("Fizz");
        if(i%5==0)
            output[i-1]+=string("Buzz");
        if(output[i-1]=="")
            output[i-1]+=to_string(i);
    }
    return output;
    }
};

注意,如果要直接使用output[i],那么在初始化vector的时候就需要定义好容器大小,vectoroutput(n),否则编译不通过。
还有一个百思不得其解的疑问,就是为什么最后一句output[i-1]+=to_string(i);如果换成output[i-1]=to_string(i);编译速度几乎就是慢了一倍,从3ms变成6ms,希望如果有人看到这个问题可以解答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值