【動態規劃篇】91. 解碼方法

在這里插入圖片描述
在這里插入圖片描述

91. 解碼方法

題目鏈接: 91. 解碼方法
題目敘述: 一條包含字母 A-Z 的消息通過以下映射進行了 編碼

“1” -> ‘A’
“2” -> ‘B’

“25” -> ‘Y’
“26” -> ‘Z’
然而,在解碼已編碼的消息時,你意識到有許多不同的方式來解碼,因為有些編碼被包含在其它編碼當中(“2” 和 “5” 與 “25”)。

例如,11106可以映射為:

"AAJF" ,將消息分組為 (1, 1, 10, 6)
"KJF" ,將消息分組為 (11, 10, 6)
消息不能分組為 (1, 11, 06) ,因為 “06” 不是一個合法編碼(只有 “6” 是合法的)。
注意,可能存在無法解碼的字符串。

給你一個只含數字的 非空 字符串 s,請計算并返回 解碼 方法的 總數 。如果沒有合法的方式解碼整個字符串,返回 0

題目數據保證答案肯定是一個 32 位 的整數。

示例 1:

輸入: s= “12”
輸出: 2
解釋: 它可以解碼為 “AB”(1 2)或者 “L”(12)。

示例 2:

輸入: s = “226”
輸出: 3
解釋: 它可以解碼為 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。

示例 3:

輸入: s = “06”
輸出: 0
解釋: “06” 無法映射到 “F” ,因為存在前導零(“6” 和 “06” 并不等價)。

提示:

1 <=s.length<= 100
s 只包含數字,并且可能包含前導零。


💦 前提注意: 這道題的s是一個非空字符串,而不是數組,所以計算時應減去'0'
解題思路:

  1. 狀態表示
    dp[i]表示:以i位置為結尾時,所有解碼方法的總數
  2. 狀態轉移方程
    根據最近的一步,劃分問題
    在這里插入圖片描述
    其中a表示s[i]位置的數,b表示s[i-1]位置的數
    dp[i] = dp[i-1] + dp[i-2]
  3. 初始化
    保證填表時不越界
    0位置結尾時說明此時只解碼了一個字符
    在這里插入圖片描述
    1位置結尾時說明此時解碼了兩個字符
    在這里插入圖片描述
  4. 填表順序
    從左向右
  5. 返回值
    dp[n-1]

代碼實現:

class Solution {
public:int numDecodings(string s) {//創建dp表//初始化//填表//返回值int n = s.size();vector<int> dp(n);dp[0] = s[0] != '0';//處理邊界條件if (n == 1) return dp[0];if (s[0] != '0' && s[1] != '0') dp[1] += 1;//第一個位置能單獨解碼,并且第二個位置也能單獨解碼int t = (s[0] - '0') * 10 + s[1] - '0';//前兩個位置所表示的數if (t >= 10 && t <= 26) dp[1] += 1;for (int i = 2; i < n; i++){if (s[i] != '0') dp[i] += dp[i - 1];//處理單獨解碼的情況int t = (s[i - 1] - '0') * 10 + s[i] - '0';//第二種情況所對應的數if (t >= 10 && t <= 26) dp[i] += dp[i - 2];}return dp[n - 1];}

細節優化:
處理邊界問題以及初始化問題的技巧

  • 我們可以開一個比舊的表多1個的新的dp表,使得舊dp表下標為0的位置,映射到新的dp表下標為1的位置,舊的下標為1的位置映射到新的下標為2的位置…依次類推。
    在這里插入圖片描述
  • 這樣以來dp[i]就可以表示為以第i個字符為終點的解碼方法的個數。所以就只需要初始化第1的字符即可。
  • 這里有個小細節,我們在初始化dp[0]這個虛擬節點時要將它初始化成1,比如只有兩個字符我們要判斷時 ,第二個字符單獨解碼時的方法數為1,第二個字符與第一個字符共同解碼時的方法總數應該為2dp[2] = dp[1] + dp[0],我們可以將dp[0]給反推出來,所以dp[0]應該初始化為1
    在這里插入圖片描述

代碼實現:

class Solution {
public:int numDecodings(string s) {//創建dp表//初始化//填表//返回值int n = s.size();//創建dp表vector<int> dp(n+1);dp[0] = 1;dp[1] = s[0] != '0';for(int i = 2;i <= n;i++){if(s[i-1] != '0') dp[i]+=dp[i-1];int b = 10*(s[i-2]-'0') + (s[i -1] - '0');if(b>=10 && b <= 26) dp[i]+=dp[i- 2];}return dp[n];}
};

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

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

相關文章

使用【docker】+【shell】腳本半自動化部署微服務項目

一.前言 以下是一個基于 ?Docker Shell腳本? 的半自動化部署方案&#xff0c;包含鏡像構建、容器管理、網絡配置和日志監控等核心功能&#xff0c;適用于大多數Web應用或微服務項目。 二?.目錄結構 三.腳本代碼實現 1.?Shell腳本實現 (deploy.sh) #!/bin/bash# 設置顏…

每天一道算法題-兩數相加

給你兩個 非空 的鏈表&#xff0c;表示兩個非負的整數。它們每位數字都是按照 逆序 的方式存儲的&#xff0c;并且每個節點只能存儲 一位 數字。 請你將兩個數相加&#xff0c;并以相同形式返回一個表示和的鏈表。 你可以假設除了數字 0 之外&#xff0c;這兩個數都不會以 0 …

win10搭建opengl環境搭建并測試--輸出立方體球體和碗型并在球體上貼圖

參照本文檔可以完成環境搭建和測試&#xff0c;如果想要快速完成環境的搭建可以獲取本人的工程&#xff0c;包括所用到的工具鏈和測試工程源碼獲取&#xff08;非免費介意務下載&#xff09;&#xff1a;鏈接: https://pan.baidu.com/s/1H2ejbT7kLM9ore5MqyomgA 提取碼: 8s1b …

CIR-Net:用于 RGB-D 顯著性目標檢測的跨模態交互與優化(問題)

摘要 問題一&#xff1a;自模態注意力優化單元和跨模態加權優化單元什么意思&#xff1f; 1 優化中間件結構的作用 位置&#xff1a;位于編碼器和解碼器之間 輸入&#xff1a;編碼器提取的RGB特征&#xff0c;深度特征以及RGB-D特征。 輸出&#xff1a;經過優化的RGB&…

LS-NET-004-簡單二層環路解決(華為銳捷思科)

LS-NET-004-簡單二層環路解決&#xff08;華為銳捷思科&#xff09; 以下是為您準備的二層環路示意圖及解決方案&#xff0c;包含四大廠商配置對比&#xff1a; 一、Mermaid 二層環路示意圖 graph TD SW1 -->|Gi0/1| SW2 SW2 -->|Gi0/2| SW3 SW3 -->|Gi0/3| SW1 SW1…

【正點原子K210連載】第七十六章 音頻FFT實驗 摘自【正點原子】DNK210使用指南-CanMV版指南

第七十六章 音頻FFT實驗 本章將介紹CanMV下FFT的應用&#xff0c;通過將時域采集到的音頻數據通過FFT為頻域。通過本章的學習&#xff0c;讀者將學習到CanMV下控制FFT加速器進行FFT的使用。 本章分為如下幾個小節&#xff1a; 32.1 maix.FFT模塊介紹 32.2 硬件設計 32.3 程序設…

火絨終端安全管理系統V2.0——行為管理(軟件禁用+違規外聯)

火絨終端安全管理系統V2.0&#xff1a;行為管理策略分為軟件禁用和違規外聯兩部分&#xff0c;能夠管理終端用戶軟件的使用&#xff0c;以及終端用戶違規連接外部網絡的問題。 l 軟件禁用 軟件禁用策略可以選擇軟件名單的屬性、添加軟件名單以及設置發現終端使用禁用軟件時的…

FastJson:JSON JSONObject JSONArray詳解以及SimplePropertyPreFilter 的介紹

FastJson&#xff1a;JSON JSONObject JSONArray詳解以及SimplePropertyPreFilter 的介紹 FastJson是阿里巴巴開發的一款專門用于Java開發的包&#xff0c;實現Json對象&#xff0c;JavaBean對&#xff0c;Json字符串之間的轉換。 文章目錄 FastJson&#xff1a;JSON JSONObje…

DEFI幣生態重構加速,XBIT去中心化交易所引領DEX安全新范式

2025年3月18日&#xff0c;全球加密市場在監管與技術共振下迎來結構性變革。去中心化金融&#xff08;DeFi&#xff09;代幣DEFI幣因跨鏈流動性協議升級引發社區熱議&#xff0c;而幣應XBIT去中心化交易所&#xff08;以下簡稱XBIT&#xff09;憑借其鏈上透明驗證機制、無需下載…

解析漏洞總結

首先說下為什么要寫著篇文章&#xff0c;之前學習倒是學過&#xff0c;學完就忘啊&#xff0c;tmd iis 5.x/6.0 這個版本有兩種解析姿勢  一.兩種解析漏洞 1.目錄解析 2./xxx.asp/xx.jpg 簡單說一下是什么意思&#xff0c;這里是先在他服務器跟目錄創建一個名為 xxx.…

前端小食堂 | Day18 - 身份認證の八卦陣

&#x1f510; 今日秘術&#xff1a;JWT/OAuth2 攻防奧義 1. JWT 安全の六合陣法 // &#x1f6ab; 危險操作&#xff1a;未驗證簽名 const decodeUnsafe (token) > JSON.parse(atob(token.split(.)[1])); // ? 安全姿勢一&#xff1a;嚴格簽名驗證 import jwt fro…

將bin文件燒錄到STM32

將bin文件燒錄到STM32 CoFlash下載生成hex文件hex2bin使用下載bin到單片機 CoFlash下載 選擇需要安裝的目錄 在Config中可以選擇目標芯片的類型 我演示的是 stm32f103c8t6 最小系統板 Adapter&#xff1a;燒錄器類型 Max Clock&#xff1a;下載速度 Por&#xff1a;接口類型&am…

【Embedded World 2025:邊緣 AI、存儲革新與 1X nm 工藝重塑嵌入式未來】

Embedded World 2025于3月11-13日在德國紐倫堡舉辦&#xff0c;作為全球嵌入式系統領域頂級盛會&#xff0c;匯聚超千家展商與3萬專業觀眾&#xff0c;聚焦嵌入式智能、安全管理及行業解決方案。展會呈現邊緣AI、低功耗MCU、5G RedCap、新型存儲及車規級技術等前沿方向&#xf…

3.19刷題

P6443 [COCI 2010/2011 #1] TIMSKO - 洛谷 #include<bits/stdc.h> using namespace std; int main(){int n,m,k,maxp0;cin>>m>>n>>k;for(int i0;i<n;i){//男生參加人數if(k3*i<mn&&2*i<m) maxpi;}cout<<maxp;return 0; }P645…

Android NDK --- JNI從入門到基礎的全面掌握 (上)

引言 先問 jni是什么&#xff1f; jni和ndk 的關系&#xff1f; 答&#xff1a; java調用 C、C 的代碼。 兩者一個是調用&#xff0c;一個是用c 、c 寫 。 這兩個問題問出來似乎知道又好像不知道。 正文 jni 概述 定義&#xff1a;java Native Interface 即 java本地接口 …

爬蟲 crawler 入門爬取不設防網頁 并實現無限增生

基礎版本 爬取網頁后直接將前端html代碼不加處理的輸出 # pip3 install requests import requests# request the target URL def crawler():response requests.get("https://www.scrapingcourse.com/ecommerce/")response.raise_for_status()print(response.text)…

C++高頻(四)之c++11新特性

C++面試高頻(四)之c++11新特性 1.簡述C++11有什么新特性?? 自動類型推導(Type Inference):引入了 auto 關鍵字,允許編譯器根據初始化表達式的類型自動推導變量的類型。統一的初始化語法(Uniform Initialization Syntax):引入了用花括號 {} 進行初始化的統一語法,可…

HarmonyOs- UIAbility應用上下文

上下文為何物 上下文在計算機科學領域是一個廣泛存在的概念。是現代操作系統核心抽象概念之一。其本質是環境信息的結構化封裝。 有過開發經驗的都知道&#xff0c;當我們在一個系統上進行開發的時候&#xff0c;無論是Android&#xff0c;HarmonyOs&#xff0c;Linux 等等&a…

Redis解決緩存擊穿問題——兩種方法

目錄 引言 解決辦法 互斥鎖&#xff08;強一致&#xff0c;性能差&#xff09; 邏輯過期&#xff08;高可用&#xff0c;性能優&#xff09; 設計邏輯過期時間 引言 緩存擊穿&#xff1a;給某一個key設置了過期時間&#xff0c;當key過期的時候&#xff0c;恰好這個時間點對…

架構思維:軟件建模與架構設計的關鍵要點

文章目錄 1. 軟件建模的核心概念2. 七種常用UML圖及其應用場景類圖時序圖組件圖部署圖用例圖狀態圖活動圖 3. 軟件設計文檔的三階段結構4. 架構設計的關鍵實踐1. 用例圖&#xff1a;核心功能模塊2. 部署圖&#xff1a;架構演進階段3. 技術挑戰與解決方案4. 關鍵架構圖示例5. 架…