zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)

    672. 灯泡开关 Ⅱ

    现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮。在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态。

    假设这 n 只灯泡被编号为 [1, 2, 3 …, n],这 4 个按钮的功能如下:

    将所有灯泡的状态反转(即开变为关,关变为开)
    将编号为偶数的灯泡的状态反转
    将编号为奇数的灯泡的状态反转
    将编号为 3k+1 的灯泡的状态反转(k = 0, 1, 2, …)
    示例 1:

    输入: n = 1, m = 1.
    输出: 2
    说明: 状态为: [开], [关]
    示例 2:

    输入: n = 2, m = 1.
    输出: 3
    说明: 状态为: [开, 关], [关, 开], [关, 关]
    示例 3:

    输入: n = 3, m = 1.
    输出: 4
    说明: 状态为: [关, 开, 关], [开, 关, 开], [关, 关, 关], [关, 开, 开].
    注意: n 和 m 都属于 [0, 1000].

    PS:

    当n=1的时候,当m=1的时候包含全部两种状态,m=2的时候包含全部两种状态,m>2的时候包含m=1的时候的全部状态,所以返回2

    当n=2的时候,当m=1的时候包含3种状态,m=2的时候包含4种状态,m=3包含全部状态,m>3的时候包含m=2的全部状态也就是全部2种状态

    当n>2的时候,当m=1的时候包含7种状态,当m=2的时候包含8种状态,m=3的时候包含全部8种状态,m>3的时候包含m=2的全部状态也就是8种状态

    class Solution {
           public int flipLights(int n, int m) {
           if(n == 0 || m == 0){
               return 1;
           }
           if(m == 1){
               return n<3 ? n+m:4;
           }
           else if (m == 2 ){
               return n<3 ? n*m:7;
           }
           else{
               return n<3 ? 2*n:8;
           }
       }
    }
    
  • 相关阅读:
    2021.2.6 日记
    P2168 荷马史诗
    2021寒假集训——数论初步
    2021.2.5 日记
    2021.2.4 日记
    2021.2.3 日记
    堆——学习笔记
    树状数组——学习笔记
    Easy | LeetCode 350. 两个数组的交集 II | 哈希 | 排序+双指针
    Easy | LeetCode 66. 加一 | 模拟
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946296.html
Copyright © 2011-2022 走看看