Java C++题解leetcode672灯泡开关示例

 更新时间:2022年09月29日 14:27:03   作者:AnjaVon  
这篇文章主要为大家介绍了Java C++题解leetcode672灯泡开关示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目要求

思路:找规律

找到尽可能最精简的通项表达,今日参考:京城打工人

首先,归纳每个开关会影响的灯,其中(k=0,1,2,…):

开关反转灯编号
k
2k
2k+1
3k+1

可见灯以6盏为周期具有相同变化,所以以下只需要推导第一个周期里的6盏灯即可。

观察前6盏灯:

开关
1一、三、四
2一、二
3一、三
4一、二、四
5一、三
6一、二

发现灯2、6和3、5分别受同样的开关影响,所以状态相同;

观察前4盏灯,发现灯1、3与灯2、4存在规律:

  • 当开关按动次数为数时,两组灯状态分别相同
  • 当开关按动次数为数时,两组灯状态分别不同
  • 所以根据其中一组灯的状态即可判断另一组。

因此,选择一组+另一组中的一盏,即可涵盖所有灯的状态。

因此选择观察前三盏灯即可预知所有明暗状态:

前三盏灯在不同按动次数中的状态如下:

发现在一次按动时会出现四种状态,两次按动时出现七种状态【缺少011状态】,三次及以上按动即可出现所有状态,共2^3=8种。

此时仅需枚举一盏灯和两盏灯时的状态即可,后续都与三盏相同:

  • 一盏灯仅可能有两种状态;
  • 两盏灯可能有四种状态;

但按动一次时仅会出现三种情况【缺少11状态】:

  • 将上述规律归纳为代码即可!

Java

class Solution {
    public int flipLights(int n, int presses) {
        if (presses == 0)
            return 1;
        if (n == 1)
            return 2;
        else if (n == 2)
            return presses == 1 ? 3 : 4;
        else
            return presses == 1 ? 4 : presses == 2 ? 7 : 8;
    }
}
  • 时间复杂度:O(1)O(1)O(1)
  • 空间复杂度:O(1)O(1)O(1)

C++

class Solution {
public:
    int flipLights(int n, int presses) {
        if (presses == 0)
            return 1;
        if (n == 1)
            return 2;
        else if (n == 2)
            return presses == 1 ? 3 : 4;
        else
            return presses == 1 ? 4 : presses == 2 ? 7 : 8;
    }
};
  • 时间复杂度:O(1)
  • 空间复杂度:O(1)

Rust

  • 浅学一下rust的match~
impl Solution {
    pub fn flip_lights(n: i32, presses: i32) -> i32 {
        if presses == 0 {
            return 1;
        }
        match n {
            1 => 2,
            2 => {
                match presses {
                    1 => 3,
                    _ => 4
                }
            },
            _ => {
                match presses {
                    1 => 4,
                    2 => 7,
                    _ => 8
                }
            },
        }
    }
}
  • 时间复杂度:O(1)
  • 空间复杂度:O(1)

总结

本来以为要DP或者生模拟,结果是数学思维找规律。

一道代码无敌简单,思路究极绕的题目,以至于推导完思路感觉就结束了【代码都没啥区别……】

以上就是Java C++题解leetcode672灯泡开关示例的详细内容,更多关于Java C++题解灯泡开关的资料请关注脚本之家其它相关文章!

相关文章

  • Java中springboot搭建html的操作代码

    Java中springboot搭建html的操作代码

    这篇文章主要介绍了Java中springboot搭建html的相关操作,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 如何解决Spring的UnsatisfiedDependencyException异常问题

    如何解决Spring的UnsatisfiedDependencyException异常问题

    这篇文章主要介绍了如何解决Spring的UnsatisfiedDependencyException异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • mybatis insert 返回自增主键的实现示例

    mybatis insert 返回自增主键的实现示例

    mybatis 在新增之后怎么也获取不到自增主键,本文主要介绍了mybatis insert 返回自增主键的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Java获取汉字对应的拼音(全拼或首字母)

    Java获取汉字对应的拼音(全拼或首字母)

    这篇文章主要介绍了Java如何获取汉字对应的拼音(全拼或首字母),文中实现的方法是引用了pinyin4j-2.5.0.jar,然后给出了完整的示例代码,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • java实现服务器巡查的代码

    java实现服务器巡查的代码

    接到上级领导任务,需要实现一个这样的需求,一大批服务器,需要检查服务器能否ping通,ssh密码是否正常,以及检查服务器的cpu,内存,硬盘占用情况,下面通过java代码实现服务器巡查功能,需要的朋友一起看看吧
    2021-12-12
  • SpringBoot配置Clickhouse的示例代码

    SpringBoot配置Clickhouse的示例代码

    这篇文章主要介绍了SpringBoot配置Clickhouse的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下
    2022-02-02
  • Java 超基础讲解String的使用

    Java 超基础讲解String的使用

    字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串,让我们一起来了解它
    2022-04-04
  • 解决Eclipse add external jars运行出现java.lang.NoClassDefFoundError的方法

    解决Eclipse add external jars运行出现java.lang.NoClassDefFoundErro

    本篇文章对Eclipse add external jars导致运行出现java.lang.NoClassDefFoundError的解决方法进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • Required request body is missing的问题及解决

    Required request body is missing的问题及解决

    这篇文章主要介绍了Required request body is missing的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java程序测试上传Maven工程代码示例解析

    Java程序测试上传Maven工程代码示例解析

    这篇文章主要介绍了Java程序测试上传Maven工程代码示例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论