这是悦乐书的第221次更新,第233篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第88题(顺位题号是412)。

编写一个程序,输出从1到n的数字的字符串表示。但对于三的倍数,它应输出“Fizz”而不是数字,对于五的倍数,应该输出“Buzz”。 对于三和五共同的倍数,应输出“FizzBuzz”。例如:

输入:n = 15

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

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

将n转为对应的字符串,分为三种情况:

1、是3或者5的倍数,那么n转为"Fizz"或者"Buzz"。

2、是3和5的共同倍数,那么n转为"FizzBuzz"。

3、不是前两种情况,那么n直接转为字符串。

因此,直接使用取余,判断余数是否为0,来分别对应上述三种情况,将对应的字符串添加进list中即可。

此解法时间复杂度为O(n),空间复杂度为O(1)。

public List<String> fizzBuzz(int n) {
List<String> list = new ArrayList<String>();
for (int i=1; i<= n; i++) {
if (i%3 != 0) {
if (i%5 != 0) {
list.add(i+"");
} else {
list.add("Buzz");
}
} else {
if (i%5 != 0) {
list.add("Fizz");
} else {
list.add("FizzBuzz");
}
}
}
return list;
}

03 第二种解法

在第一种解法里,我们分析了三种需要判断的情况,对于第二种情况,可以直接用n对15取余来判断。

此解法时间复杂度为O(n),空间复杂度为O(1)。

public List<String> fizzBuzz2(int n) {
List<String> list = new ArrayList<String>();
for (int i = 1; i <= n; i++) {
if (i % 15 == 0) {
list.add("FizzBuzz");
} else if (i % 3 == 0) {
list.add("Fizz");
} else if (i % 5 == 0) {
list.add("Buzz");
} else {
list.add(i+"");
}
}
return list;
}

04 第三种解法

使用两个变量计数(也可以理解为双指针),替换取余算法。

当某一变量等于3或者5时,将其所代表的Fizz或者Buzz字符串添加进list,然后变量归零。当一变量等于3,且另一变量等于5时,将FizzBuzz添加进list,然后两变量同时归零。

此解法时间复杂度为O(n),空间复杂度为O(1)。

public List<String> fizzBuzz3(int n) {
List<String> list = new ArrayList<String>();
int Fizz = 0, Buzz = 0;
for (int i = 1; i <= n; i++) {
Fizz++;
Buzz++;
if (Fizz == 3 && Buzz == 5) {
list.add("FizzBuzz");
Fizz = 0;
Buzz = 0;
} else if(Fizz == 3) {
list.add("Fizz");
Fizz = 0;
} else if(Buzz == 5) {
list.add("Buzz");
Buzz = 0;
} else {
list.add(i+"");
}
}
return list;
}

05 小结

算法专题目前已连续日更超过两个月,算法题文章88+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Fizz Buzz(Java实现)的更多相关文章

  1. LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  2. LeetCode算法题-Sqrt(Java实现)

    这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...

  3. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  4. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  5. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  6. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  7. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  8. LeetCode算法题-Letter Case Permutation(Java实现)

    这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...

  9. LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

    这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...

随机推荐

  1. 从a文件判断是否删除b文件中的行(sed示例)

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html test.xml文件很大,内容结构如下: <?xml v ...

  2. 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page1-6

    前言 大家好.这是开通本号的第一篇文章.从事IT行业已经20年了,从使用PowerBuilder做企业信息系统开始,做了七八年开发,然后转型Java不是很成功,从07年之后,我转做产品经理,机缘巧合, ...

  3. word2vec初探

    在自然语言处理入门里我们提到了词向量的概念,tf-idf的概念,并且在实际的影评正负面预测项目中使用了tf-idf,取得了还算不错的效果.这一篇,我们来尝试一下使用来自google的大名鼎鼎的word ...

  4. C++程序实例唯一方案,窗口只打开一次,程序只打开一次

    首先是方法: // IsAlreadyRunning - 是否已经运行 BOOL IsAlreadyRunning() { BOOL bRet = FALSE; HANDLE hMutex = ::C ...

  5. [PHP] 算法-顺时针打印矩阵的PHP实现

    1.行数和列数取出来row,col,圈数就是 (较小值-1)/2+1 2.外层循环控制圈数,内层四个for循环,i 3.第一个for循环,从左到右,j=i;j<col-i;j++;j<; ...

  6. $_POST和$GLOBALS['HTTP_RAW_POST_DATA'] 的区别

    HTTP 协议是建立在 TCP/IP 协议之上的应用层规范,它把 HTTP 请求分为三个部分:请求行.请求头.消息主体.协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协 ...

  7. 【Spring】16、注解事务 @Transactional

    概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...

  8. C#设计模式之六适配器模式(Adapter Pattern)【结构型】

    一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题,那[ ...

  9. 微信小程序 JS 获取View 和 屏幕相关属性(高度、宽度等等)

    wx.getSystemInfo({success: function (res) {thisWidth = res.windowWidth;}}); that.setData({view_Width ...

  10. Thinkphp5多数据库切换

    在项目开发中需要Thinkphp5读取多个数据库的数据,本文详细介绍Thinkphp5多数据库切换 一.在database.php配置默认数据库连接 'type'           => 'm ...