LeetCode 412:Fizz Buzz(3/5倍数)

本文详细解析了《412.FizzBuzz》编程题的解题思路,给出了执行效率极高的Java实现,时间复杂度为O(n),空间复杂度为O(1)。此外,还探讨了后端技术中的核心概念,如内存消耗、时间复杂度分析,并分享了相关的技术干货,包括《JDK之Object类》、《设计模式》和《LeetCode题库》等,帮助读者提升编程技能。

fe7afb8eb6d5c7fefd982e19a95ffadc.png

Together for a Shared future

一起向未来

1cd8eee2adf11d4d2e9eaf489b601c93.png

8597e676c39e40e5c2fb56f32a901471.png

6b0a63e835da3c58b44ec583c817a96a.png

今天我们看一道题目《412.FuzzBuzz》。

f0d07de352825e00f6f25c44db3fb570.png

题目描述

c9782b7a9d03bb2520f05b31b4f55dc7.png

给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:

  1. answer[i] == "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。

  2. answer[i] == "Fizz" 如果 i 是 3 的倍数。

  3. answer[i] == "Buzz" 如果 i 是 5 的倍数。

  4. 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 <= 10^4

fbc4896f455f594ae0e9569dddca092e.png

解题

52ac7143c6be62748661408408035c05.png

/**
     * 执行用时:1 ms, 在所有 Java 提交中击败了99.92%的用户
     * 内存消耗:42.2 MB, 在所有 Java 提交中击败了21.04%的用户
     * @param n
     * @return
     */
    public static List<String> fizzBuzz(int n) {
        List<String> result = new LinkedList<String>();
        for (int i = 1; i <= n; i++) {
            if (i % 3 == 0 && i % 5 == 0) {
                result.add("FizzBuzz");
            } else if (i % 3 == 0) {
                result.add("Fizz");
            } else if (i % 5 == 0) {
                result.add("Buzz");
            } else {
                result.add(String.valueOf(i));
            }
        }


        return result;
    }

ce14e559aa23ef5a0567945f3901bc8b.png

复杂度分析

f1d2a4e603c1a5f52e32b88791a7045d.png

1)时间复杂度:O(n)。需要遍历从 1 到 n 的每个整数,对于每个整数 i,生成 answer[i] 的时间复杂度是 O(1)。

2)空间复杂度:O(1)。注意返回值不计入空间复杂度。

后端技术&架构精华

7371247b63ccf319e747c73b930e5116.png

《源码系列》

JDK之Object 类

JDK之BigDecimal 类

JDK之String 类

JDK之Lambda表达式

Spring源码:Event事件发布与监听

《经典书籍》

Java并发编程实战:第1章 多线程安全性与风险

Java并发编程实战:第2章 影响线程安全性的原子性和加锁机制

Java并发编程实战:第3章 助于线程安全的三剑客:final & volatile & 线程封闭

《服务端技术栈》

《Docker 核心设计理念

《Kafka史上最强原理总结》

《HTTP的前世今生》

《算法系列》

读懂排序算法(一):冒泡&直接插入&选择比较

《读懂排序算法(二):希尔排序算法》

《读懂排序算法(三):堆排序算法》

《读懂排序算法(四):归并算法》

《读懂排序算法(五):快速排序算法》

《读懂排序算法(六):二分查找算法》

《设计模式》

设计模式之六大设计原则

设计模式之创建型(1):单例模式

设计模式之创建型(2):工厂方法模式

设计模式之创建型(3):原型模式

设计模式之创建型(4):建造者模式

设计模式之创建型(5):抽象工厂设计模式

《LeetCode题库》

LeetCode 383:ransomNote(赎金信)

LeetCode 1446:Consecutive Characters(连续字符)

LeetCode 520:Detect Capital(检测大写字母)

LeetCode 748:shortest-completing-word(最短补全词)

LeetCode 482:license-key-formatting(密钥格式化)

扫描二维码

获取技术干货

后台技术汇

adb6edbc464f0784280951b969207bca.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值