news 2026/9/22 4:41:54

LeetCode 2147.分隔长廊的方案数:非Hard组合数学

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 2147.分隔长廊的方案数:非Hard组合数学

【LetMeFly】2147.分隔长廊的方案数:非Hard组合数学

力扣题目链接:https://leetcode.cn/problems/number-of-ways-to-divide-a-long-corridor/

在一个图书馆的长廊里,有一些座位和装饰植物排成一列。给你一个下标从0开始,长度为n的字符串corridor,它包含字母'S''P',其中每个'S'表示一个座位,每个'P'表示一株植物。

在下标0的左边和下标n - 1的右边已经分别各放了一个屏风。你还需要额外放置一些屏风。每一个位置i - 1i之间(1 <= i <= n - 1),至多能放一个屏风。

请你将走廊用屏风划分为若干段,且每一段内都恰好有两个座位,而每一段内植物的数目没有要求。可能有多种划分方案,如果两个方案中有任何一个屏风的位置不同,那么它们被视为不同方案。

请你返回划分走廊的方案数。由于答案可能很大,请你返回它对109+ 7取余的结果。如果没有任何方案,请返回0

示例 1:

输入:corridor = "SSPPSPS"输出:3解释:总共有 3 种不同分隔走廊的方案。 上图中黑色的竖线表示已经放置好的屏风。 上图每种方案中,每一段都恰好有两个座位。

示例 2:

输入:corridor = "PPSPSP"输出:1解释:只有 1 种分隔走廊的方案,就是不放置任何屏风。 放置任何的屏风都会导致有一段无法恰好有 2 个座位。

示例 3:

输入:corridor = "S"输出:0解释:没有任何方案,因为总是有一段无法恰好有 2 个座位。

提示:

  • n == corridor.length
  • 1 <= n <= 105
  • corridor[i]要么是'S',要么是'P'

解题方法:遍历

从左往右遍历,每出现总计两个座位就要进行一次分隔,本次分隔方案数为两个座位中后一个座位与下一个座位之间的绿植数加一。(若后续再无座位,则不需要放置隔板)

总方案数就是每次放置隔板时的方案数之积。

额外注意,本题给定的答案中,若没有座位,则输出0而非“一个隔板都不放的这唯一一种方案”1。

具体做法

使用一个变量ing记录当前是否处在两个座位之后下一个座位之前的数绿植状态,使用一个变量now记录当前总计座位数或绿植数,遍历时候使用几个if-else就好了。

额外注意,可以使用一个变量atLeast2记录是否至少有两个座位,遍历过程中一旦出现累计两个座位则将该值赋值为true。

最终若不是在数绿植状态(不是刚好两个座位后)或一共也没有两个座位,返回0。

时空复杂度分析

  • 时间复杂度O ( l e n ( c o r r i d o r ) ) O(len(corridor))O(len(corridor))
  • 空间复杂度O ( 1 ) O(1)O(1)

AC代码

C++
/* * @LastEditTime: 2025-12-14 17:37:56 */typedeflonglongll;constll MOD=1e9+7;classSolution{public:intnumberOfWays(string&corridor){ll ans=1;intnow=0;booling=false;// 正在处理两块座位之间的绿植boolatLeast2=false;for(charc:corridor){if(c=='S'){if(ing){ans=ans*(now+1)%MOD;ing=false;now=1;}else{now++;if(now==2){ing=true;now=0;atLeast2=true;}}}else{// 'P'if(ing){now++;}}}if(!ing||!atLeast2){return0;}returnstatic_cast<int>(ans);}};
  • 执行用时分布8ms击败96.53%
  • 消耗内存分布26.95MB击败100.00%

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/22 7:18:53

Claude vs ChatGPT vs Gemini:全方位对比与选用指南

Claude vs ChatGPT vs Gemini&#xff1a;全方位对比与选用指南 在人工智能进入大众生活的今天&#xff0c;Claude、ChatGPT 和 Google Gemini 已成为大家最常提到的三大领先对话式 AI。虽然它们都属于大语言模型&#xff08;LLM&#xff09;&#xff0c;但在设计理念、使用体…

作者头像 李华
网站建设 2026/9/22 8:10:03

大模型量化技术原理-ZeroQuant系列(一)

简单的看第一篇&#xff0c;这个系列目前有四篇左右&#xff0c;感兴趣可以去搜搜 ZeroQuant: Efficient and Affordable Post-Training Quantization for Large-Scale TransformersZeroQuant-V2: Exploring Post-training Quantization in LLMs from Comprehensive Study to …

作者头像 李华
网站建设 2026/9/19 11:04:32

RISCV的异常和中断

常规控制流&#xff1a;程序正常执行的指令流向&#xff0c;通过branch&#xff08;条件分支&#xff09;、jump&#xff08;无条件跳转&#xff09;指令改变执行顺序&#xff0c;是处理器的常规工作状态。异常控制流&#xff08;ECP&#xff09;&#xff1a;打破常规控制流的特…

作者头像 李华
网站建设 2026/9/21 21:56:35

vue基于Spring Boot框架的水果商城设计与实现_6628xfyb_

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/9/21 18:07:58

【入门级-数据结构-3、特殊树:完全二叉树的定义与基本性质】

一、完全二叉树的严格定义 完全二叉树&#xff08;Complete Binary Tree&#xff09;是二叉树中极具规律性的特殊结构。 完全二叉树需满足两个核心条件&#xff1a; 除最后一层外&#xff0c;每一层的节点数都达到最大值&#xff08;即第k层有2^(k-1)个节点&#xff0c;k≥1&am…

作者头像 李华
网站建设 2026/9/21 22:26:55

python用openpyxl操作excel-读取或创建excel文件

python用openpyxl操作excel-读取或创建excel1&#xff0c;读取 excel 文件返回 workbook 对象def excel_read(file_path):""" 读取Excel文件返回workbook对象 """if not os.path.exists(file_path):logger.error(f文件{file_path}不存在)return …

作者头像 李华