LeetCode算法题-Fizz Buzz(Java实现)
这是悦乐书的第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实现)的更多相关文章
- LeetCode算法题-Heaters(Java实现)
这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...
- LeetCode算法题-Sqrt(Java实现)
这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Letter Case Permutation(Java实现)
这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...
- LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...
随机推荐
- Perl的变量
变量 在perl中,普通变量被称为"标量变量"(scalar),标量是指单个值的意思.还有非标量的数据,如数组.列表.hash等.标量变量和这种非标量的关系,类似于英语里面的单数和 ...
- python包导入细节
包导入格式 导入模块时除了使用模块名进行导入,还可以使用目录名进行导入.例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以使用下面这种方式导入这个模块. ...
- Linux文件权限与属性详解 之 chattr & lsattr
Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...
- C#比较两个对象是否为同一个对象。
两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存. 1.使用object.ReferenceEquals() class Program { static void Main(strin ...
- Nmap 命令操作详解
首先在安装nmap 稳定版 https://nmap.org/download.html 选择安装目录 通过cmd 去使用也可以在 安装目录中找到 进行可视化操作 以下是nmap 命令 -sT TC ...
- 【原创】MVC+ZTree实现权限树的功能
今天自己采用MVC+ZTree的技术实现权限树的功能,有需要的可以收藏一下. 1.需要引用的JS 文件 <link href="~/Content/ZTree/css/demo.css ...
- Transact-SQL解析和基本的实用语句
SQL语言 DDL(数据定义语句) DML(数据操作语句) DCL(数据控制语句) DDL 数据定义 操作对象 操作方式 创建 删除 修改 模式 CREATE SCHEMA DROP SCHEMA 表 ...
- Mybatis入门实例
MyBatis 简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...
- JavaAndroid开发部分API
JavaAndroid开发中的部分系统API 四大组件,都需要在清单文件中配置 Activity: 用来提供一个能让用户操作并与之交互的界面 onCreate(): 自动调用的方法, 在其中加载布局显 ...
- laravel前后台路由分离
在laravel中创建文件放置前台和后台控制器 找到app/providers/RouteServiceProvider.PHP文件 在内配置 例: <?php namespace App\Pr ...