leetcode 2147

2147: 分割长廊的方案数

在示例 1 中,我们可以在第 2 个座位和第 3 个座位之间的任意空隙放置一个屏风,空隙个数为两个座位的下标之差 4−1=3。

如果座位更多,例如 corridor="SSPPSSPPPSS",我们可以:

  • 在第 2 个座位和第 3 个座位之间的任意空隙放置一个屏风,空隙个数为两个座位的下标之差 4−1=3。
  • 在第 4 个座位和第 5 个座位之间的任意空隙放置一个屏风,空隙个数为两个座位的下标之差 9−5=4。
  • 这两个屏风如何放置互相独立,根据乘法原理,划分走廊的方案数为 3⋅4=12。

一般地,对于第 3,5,7,... 个座位,可以在其到其左侧最近座位之间的任意空隙放置一个屏风,空隙个数为两个座位的下标之差。总的方案数为每个屏风的放法之积。

不合法的情况:

1.没有座位。不满足题目「每一段内都恰好有两个座位」的要求。

2.一共有奇数个座位。这会导致某一段只有一个座位,不满足要求。

复制代码
class Solution {
public:
    int numberOfWays(string corridor) {
        constexpr int MOD=1'000'000'007;
        long long ans=1;
        int cnt_s=0,last_s=0;
        for(int i=0;i<corridor.size();i++){
            if(corridor[i]=='S'){
                cnt_s++;
                if(cnt_s>=3 && cnt_s%2==1) ans=ans*(i-last_s)%MOD;
                last_s=i;
            }
        }
        if(cnt_s==0 || cnt_s%2==1) return 0;
        return ans;
    }
};
相关推荐
海绵宝宝转agent5 分钟前
leetCode100算法开源笔记分享
笔记·算法
写后端的胖头鱼27 分钟前
时间复杂度 & 空间复杂度
java·数据结构·算法·时间复杂度·空间复杂度
多弗朗皮卡丘28 分钟前
数据结构番外:环形队列
数据结构·c
hahaha601630 分钟前
黑体轨迹和色温--光源白点
人工智能·嵌入式硬件·算法·计算机视觉
海绵宝宝转agent31 分钟前
基于Redis ZSet+AOP+注解实现限流注解算法
数据库·redis·算法
50万马克的面包1 小时前
顺序表和链表_精华知识点_CSDN博客
数据结构·链表
All for pursuit.1 小时前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青1 小时前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
Jasmine_llq1 小时前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法
Jasmine_llq2 小时前
《P17462 [GESP202609 八级] 末班车》
算法·dijkstra 算法·最大化版本,求最长可行值·建反向图(逆图 / 反转边)·多源 dijkstra 思想·对每个终点单独跑一遍djst·离线预处理 + 在线查询