python-leetcode-統計構造好字符串的方案數

2466. 統計構造好字符串的方案數 - 力扣(LeetCode)

這個問題可以用**動態規劃(DP)**來解決,思路如下:


思路

1. 定義 DP 數組

dp[i] 表示長度為 i 的好字符串的個數

2. 狀態轉移方程
  • 我們可以在 dp[i] 的基礎上添加 zero'0',得到 dp[i + zero]
  • 或者在 dp[i] 的基礎上添加 one'1',得到 dp[i + one]

因此,狀態轉移方程為:dp[i]=dp[i?zero]+dp[i?one]

需要對 10^9 + 7 取模。

3. 初始化
  • dp[0] = 1,表示空字符串。
4. 目標
  • 我們要求 low ≤ i ≤ high 之間的所有 dp[i] 的總和。

代碼實現

def countGoodStrings(low: int, high: int, zero: int, one: int) -> int:MOD = 10**9 + 7dp = [0] * (high + 1)dp[0] = 1  # 空字符串# 計算 dpfor i in range(1, high + 1):if i >= zero:dp[i] = (dp[i] + dp[i - zero]) % MODif i >= one:dp[i] = (dp[i] + dp[i - one]) % MOD# 計算 [low, high] 之間的總和return sum(dp[low: high + 1]) % MOD

復雜度分析

  • 時間復雜度:O(high)。
  • 空間復雜度:O(high)。

示例

輸入
print(countGoodStrings(2, 3, 1, 2))
輸出
5
解釋

滿足條件的字符串:

  • "00""11""01""10""001"

優化

由于 dp[i] 只依賴于前面的 dp[i-zero]dp[i-one],可以用一個變量存儲 dp[low]dp[high] 之間的和,減少不必要的計算:

def countGoodStrings(low: int, high: int, zero: int, one: int) -> int:MOD = 10**9 + 7dp = [1] + [0] * highresult = 0for i in range(1, high + 1):if i >= zero:dp[i] = (dp[i] + dp[i - zero]) % MODif i >= one:dp[i] = (dp[i] + dp[i - one]) % MODif i >= low:result = (result + dp[i]) % MOD  # 直接求和return result

這樣可以避免額外的 sum() 計算,使得代碼更高效!🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72679.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL------存儲引擎和用戶和授權

9.存儲引擎 1.兩種引擎 MyISAM和InnoDB 2.兩種區別 1.事務: MyISAM不支持事務 2.存儲文件: innodb : frm、ibd MyISAM: frm、MYD、MYI 3.數據行鎖定: MyISAM不支持 4.全文索引: INNODB不支持,所以MYISAM做select操作速度很快 5.外鍵約束: MyISAM…

題海拾貝:P9241 [藍橋杯 2023 省 B] 飛機降落

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》 歡迎點贊&#xff0c;關注&#xff01; 1、題…

刪除有序數組中的重復項(js實現,LeetCode:26)

給你一個 非嚴格遞增排列 的數組 nums &#xff0c;請你原地刪除重復出現的元素&#xff0c;使每個元素只出現一次&#xff0c;返回刪除后數組的新長度。元素的相對順序應該保持一致。然后返回 nums 中唯一元素的個數。 考慮 nums 的唯一元素的數量為 k &#xff0c;你需要做以…

3-9 WPS JS宏單元格復制、重定位應用(拆分單表到多表)

************************************************************************************************************** 點擊進入 -我要自學網-國內領先的專業視頻教程學習網站 *******************************************************************************************…

大白話react第十六章React 與 WebGL 結合的實戰項目

大白話react第十六章React 與 WebGL 結合的實戰項目 1. 項目簡介 React 是一個構建用戶界面的強大庫&#xff0c;而 WebGL 則允許我們在網頁上實現高性能的 3D 圖形渲染。將它們結合起來&#xff0c;我們可以創建出炫酷的 3D 網頁應用&#xff0c;比如 3D 產品展示、虛擬場景…

【AI賦能】AI 工具生成視頻教材:從創意到成品的全流程指南

AI 工具生成視頻教材&#xff1a;從創意到成品的全流程指南 目標 通過本教材&#xff0c;您將學會如何利用 AI 工具&#xff08;Grok、Sora、Speechify 和 CapCut&#xff09;生成一個完整的視頻&#xff0c;包括腳本生成、視頻片段制作、字幕添加、音頻生成以及最終剪輯合成…

C/C++藍橋杯算法真題打卡(Day2)

一、面試題 08.01. 三步問題 - 力扣&#xff08;LeetCode&#xff09; 算法代碼&#xff1a; class Solution { public:const int MOD 1e9 7;int waysToStep(int n) {// 1. 創建 dp 表// 2. 初始化// 3. 填表// 4. 返回// 處理邊界情況if (n 1 || n 2)return n;if (n 3)r…

騰訊云物聯網平臺(IoT Explorer)設備端使用

1、直接看圖流程 2、跑起來demo,修改產品id,設備名稱,設備秘鑰。 3、連接部分 4、修改默認地址和端口 sdk里面的地址默認是帶著產品ID拼接的,咱們現在中鐵沒有泛域名解析,要改下這里。把+productID都去掉,然后地址里的.也去掉。

GStreamer —— 2.13、Windows下Qt加載GStreamer庫后運行 - “教程13:播放控制“(附:完整源碼)

運行效果(音頻) 簡介 上一個教程演示了GStreamer工具。本教程介紹視頻播放控制。快進、反向播放和慢動作都是技術 統稱為 Trick Modes&#xff0c;它們都有一個共同點 修改 Normal playback rate。本教程介紹如何實現 這些效果并在交易中添加了幀步進。特別是&#xff0c;它 顯…

Dify+DeepSeek | Excel數據一鍵可視化(創建步驟案例)(echarts助手.yml)(文檔表格轉圖表、根據表格繪制圖表、Excel繪制圖表)

Dify部署參考&#xff1a;Dify Rag部署并集成在線Deepseek教程&#xff08;Windows、部署Rag、安裝Ragan安裝、安裝Dify安裝、安裝ollama安裝&#xff09; DifyDeepSeek - Excel數據一鍵可視化&#xff08;創建步驟案例&#xff09;-DSL工程文件&#xff08;可直接導入&#x…

vscode mac版本 配置git

首先使用 type -a git查看git的安裝目錄 然后在vscode中找到settings配置文件&#xff0c;修改git.path

JVM與性能調優詳解

以下是關于 JVM與性能調優 的詳細解析&#xff0c;結合理論、實踐及常見問題&#xff0c;分多個維度展開&#xff1a; 一、JVM性能調優的核心目標 性能調優的核心目標是通過優化內存管理、垃圾回收&#xff08;GC&#xff09;策略和線程管理&#xff0c;實現以下平衡&#xff…

Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...

Vue2&3 基礎性1. 關於Vue2和Vue3生命週期的差別2. Vue2&3組件之間傳參不同點Vue2 傳遞與接收Vue3 傳遞與接收 (使用script setup語法糖)Vue3 傳遞與接收 (不使用script setup語法糖) 3. Vue2&3 keep-alive 組件Vue2 keep-aliveVue3 keep-alive 進階性爲什麼POST請求…

基于SpringBoot實現旅游酒店平臺功能一

一、前言介紹&#xff1a; 1.1 項目摘要 隨著社會的快速發展和人民生活水平的不斷提高&#xff0c;旅游已經成為人們休閑娛樂的重要方式之一。人們越來越注重生活的品質和精神文化的追求&#xff0c;旅游需求呈現出爆發式增長。這種增長不僅體現在旅游人數的增加上&#xff0…

【程序自動分析——并查集,離散化】

題目 代碼&#xff08;注意不是把p修改為unordered_map&#xff0c;而是增加一個get&#xff09; #include <bits/stdc.h> using namespace std;const int N 2e510; //n個數據&#xff0c;可能引入2*n個離散點int p[N]; bool cannot; unordered_map<int, int> mp…

審批流AntV框架螞蟻數據可視化X6餅圖(附注釋)

大家好&#xff0c;這次使用的是AntV的螞蟻數據可視化X6框架&#xff0c;類似于審批流的場景等&#xff0c;代碼如下&#xff1a; X6框架參考網址&#xff1a;https://x6.antv.vision/zh/examples/showcase/practices#bpmn 可以進入該網址&#xff0c;直接復制下方代碼進行調試…

linux取代ls的命令行工具:eza

官方倉庫 https://github.com/eza-community/eza 安裝 cargo install eza驗證 eza --version用法 替換ls 別名 安裝文檔 官方提供的安裝文檔是這個 https://github.com/eza-community/eza/blob/main/INSTALL.md 可以通過cargo命令安裝&#xff0c;debian還可以通過apt安裝…

【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)

文章目錄 人人都該學習的DeepSeekDeepSeek不同版本功能差異DeepSeek與硬件直接的關系DeepSeek系統兼容性部署方式選擇部署步驟&#xff08;Ollama方式&#xff09;1.選定適合的deepseek版本2.環境準備3.安裝Ollama4.部署deepseek5.測試使用 人人都該學習的DeepSeek DeepSeek 作…

redis熱key

在 Redis 中&#xff0c;熱 Key&#xff08;Hot Key&#xff09; 是指被頻繁訪問的 Key&#xff0c;可能會導致以下問題&#xff1a; 性能瓶頸&#xff1a;單個 Redis 實例的 CPU 或網絡帶寬被耗盡。 數據傾斜&#xff1a;在 Redis 集群中&#xff0c;熱 Key 可能導致某個節點…

宇樹科技嵌入式面試題及參考答案(春晚機器人的公司)

目錄 設計一個帶看門狗(Watchdog)的嵌入式系統,描述故障恢復流程 在資源受限的 MCU 上實現 OTA 升級功能,描述關鍵設計點 如何實現 OTA(空中升級)功能?描述固件校驗和回滾機制的設計要點 推挽輸出與開漏輸出的區別?舉例說明其在 GPIO 控制中的應用 UART、SPI、I2C …