3 動態規劃解解碼問題

來源:LeetCode第91題

難度:中等

描述:一條包含字母A-Z的消息通過以下映射進行了編碼:
'A'->1,'B'->2,'z'->26,要接嗎已編碼的消息,所有數字必須基于上述映射的方法,反向映射回字母(可能由多種方法),例如"11106"可以映射成'AAJF',將消息分組為(1 1 10 6),注意,消息不能分組為(1 11 06)因為06不能映射成F,這是因為'6'和'06'在映射中并不等價。
示例1:
輸入:s="12";
輸出:2
解釋:他可以解碼為"AB"(1 2)或者"L"(12);

第一種求解方法:遞歸

//定義一個遞歸函數,String s表述輸入的字符串,index表示開始進行判斷的索引
public int numDecode(String s,int index)
{
//當索引大于s.length()的時候,表明已經找到了一個路徑返回1,這是作為遞歸的終止條件if(index>=s.length())
return 1;int res=0;
if(s.charAt(index)!='0')
{
//這個判斷標準表明s.chaeAt(index)可以作為單獨的一個字母,從而可繼續向下走
res+=numDecode(s,index+1);
}
//以'1'開頭或以2開頭且第二個字母小于6(26),兩者均要滿足下一個字母存在
if(((index+1)<=s.length()-1)&&(s.charAt(index)=='1'||(s.charAt(index)=='2'&&s.charAt(index+1)<='6')))
{
res+=numDecode(s,index+2);
}
map[index]=res;
return res;
}

在進行遞歸操作的時候,很多情況下會出現重復計算,從而可以使用一個map實現計算過得值的一個存儲,從而使得不用進行重復計算,
?

public int numDecode(String s,int index,int []map)
{
if(index>=s.length())
return 1;
int res=0;
if(map[index]!=-1)
{
return res+map[index];
}
if(s.charAt(index)!='0')
{
res+=numDecode(s,index+1,map);
}
if((index+1<=s.length()-1)&&((s.charAt(index)=='1')||(s.charAt(index)=='2'||(s.charAt(index+1)<='6'))))
{
res+=numDecode(s,Index+2,map);
}
}
public void NumDecode(String s)
{
int []map=new int [s.length()];
numDecode(s,0,map);
}

動態規劃求解,除此之外,還可以使用動態規劃進行求解,每一次可以走一步也可以走兩步
?


public int numDecode3(String s,int index)
{
int dp[]=new int[s.length()];
if(s.charAt(0)=='0')
{
dp[0]=0
}else
{
dp[0]=1;
}
for(int i=1;i<s.length();i++)
{
if(s.charAt(i)!='0')
{
dp[i]=dp[i-1]
}else
{
dp[i]=0;
}
if(i>=2)
{
if((i+1<=s.length()-1)&&((s.charAt(i)=='1')||(s.charAt(i)=='2'&&s.charAt(i+1)<='6')))
{
dp[i]+=dp[i-2];
}
}
}
return dp[s.length()-1]
}

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

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

相關文章

MindStudio學習一 整體介紹

一場景介紹 二 安裝介紹 1.LINUX 采用無昇騰硬件采用linux 分部署 2.WINDOWS 3.linux下安裝整體步驟 3.1安裝依賴 3.2 安裝步驟 1.gcc cmake 等依賴 2.python3.7.5 3.pip 安裝依賴 4.安裝JDK 5.安裝 Ascend-cann-toolkit 6.解壓安裝Mindstudio 7.進入bin路徑 ./…

MySQL where 子句

文章目錄 前言MySQL where 子句語法 從命令提示符中讀取數據使用PHP腳本讀取數據后言 前言 hello world歡迎來到前端的新世界 &#x1f61c;當前文章系列專欄&#xff1a;Mysql &#x1f431;?&#x1f453;博主在前端領域還有很多知識和技術需要掌握&#xff0c;正在不斷努力…

Javascript的form表單校驗輸入框

以下是HTML代碼&#xff1a; <form name"myForm" onsubmit"return validateForm()"><label for"name">姓名&#xff1a;</label><input type"text" id"name" name"name"><br><l…

【ArcGIS Pro微課1000例】0035:柵格影像拼接(dem高程數據)

本實驗講解在ArcGIS Pro中,柵格數據的兩種拼接(鑲嵌)方法,適用于遙感影像、DOM、DEM、DSM等常見柵格數據。 文章目錄 一、加載實驗數據二、柵格拼接工具1. 鑲嵌2. 鑲嵌至新柵格三、注意事項四、拓展閱讀一、加載實驗數據 加載配套實驗數據中的0035.rar中的兩個dem數據,如…

455.分發餅干

原題鏈接&#xff1a;455.分發餅干 思路&#xff1a; 先使用大餅干喂飽大胃口的&#xff0c;再到剩余的里面用大餅干喂剩下大胃口的 &#xff0c;直到全部滿足或者喂不了了為止。 全代碼&#xff1a; class Solution { public:int findContentChildren(vector<int>&am…

【從刪庫到跑路】MySQL數據庫 — E-R圖 | 關系模型

&#x1f38a;專欄【MySQL】 &#x1f354;喜歡的詩句&#xff1a;更喜岷山千里雪 三軍過后盡開顏。 &#x1f386;音樂分享【如愿】 大一同學小吉&#xff0c;歡迎并且感謝大家指出我的問題&#x1f970; 文章目錄 &#x1f339;簡述什么是E-R圖?核心概念 &#x1f339;E-R圖…

LeetCode40. Combination Sum II

文章目錄 一、題目二、題解 一、題目 Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target. Each number in candidates may only be used once in…

完美解決:Nginx訪問PHP出現File not found.

目錄 解決方法一&#xff1a; 解決方法二&#xff1a; 遇到 File not found. 出現的問題解決&#xff1a; 解決方法一&#xff1a; 修改nginx的主配置文件。 vi /etc/nginx/nginx.conf location ~ \.php$ { root html; fastcgi_pass …

unity Toggle,初始時默認不選中,若選中則不可取消選中。不寫碼實現其效果

實現效果&#xff1a; 初始默認時&#xff1a; 選中時&#xff1a; 零代碼實現&#xff1a; 步驟1 步驟2 步驟3

[autojs]ui線程中更新控件的值的問題

"ui"; ui.layout(<vertical><button id"autoFloatWindow" text"開啟懸浮窗" textSize"15sp" /><button id"autoService" text"開啟無障礙服務" textSize"15sp" /><button id"…

一篇總結 Linux 系統啟動的幾個匯編指令

學習 Linux 系統啟動流程&#xff0c;必須熟悉幾個匯編指令&#xff0c;總結給大家。 這里不是最全的&#xff0c;只列出一些最常用的匯編指令。 一&#xff0e;數據處理指令 1.數據傳送指令 【MOV指令】 把一個寄存器的值(立即數)賦給另一個寄存器&#xff0c;或者將一個…

Python---函數的參數類型

位置參數 理論上&#xff0c;在函數定義時&#xff0c;我們可以為其定義多個參數。但是在函數調用時&#xff0c;我們也應該傳遞多個參數&#xff0c;正常情況&#xff0c;其要一一對應。 相關鏈接&#xff1a;Python---函數的作用&#xff0c;定義&#xff0c;使用步驟&…

opencv 常用操作指南

1.通道交換 讀取圖像&#xff0c;然后將RGB通道替換成BGR通道&#xff0c;需要注意的是&#xff0c;opencv讀取的圖像默認是BGR。cv2.cvtColor函數可以參考Color Space Conversions img cv2.imread(imori.jpg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) cv2.imwrite(answe…

1|1111

1、指定在每天凌晨4&#xff1a;00將該時間點之前的系統日志信息&#xff08;/var/log/messages &#xff09;備份到目錄下/backup&#xff0c;備份后日志文件名顯示格式logfileYY-MM-DD-HH-MM 2、配置ssh免密登陸&#xff1a;客戶端主機通過redhat用戶基于秘鑰驗證方式進行遠…

微服務實戰系列之Nginx

前言 Nginx&#xff1f;寫了那么多文章&#xff0c;為什么今天才輪到它的表演&#xff1f;那是因為它實在太重要了&#xff0c;值得大書特書&#xff0c;特別對待。 當我們遇到單點瓶頸&#xff0c;第一個idea是&#xff1f;Nginx&#xff1b; 當我們需要反向代理&#xff0c;…

機器學習/sklearn筆記:MeanShift

1 算法介紹 一種基于質心的算法通過更新候選質心使其成為給定區域內點的均值候選質心的位置是通過一種稱為“爬山”技術迭代調整的&#xff0c;該技術找到估計的概率密度的局部最大值 1.1 基本形式 給定d維空間的n個數據點集X&#xff0c;那么對于空間中的任意點x的均值漂移…

C#,《小白學程序》第一課:初識程序,變量,數據與顯示

曰&#xff1a;掃地僧練就絕世武功的目的是為了掃地更干凈。 1 引言 編程只是一項技術&#xff0c;如包包子&#xff0c;不是什么高深的科學。 學習程序最不好的方法是先學習枯燥的語法。 學習程序主要是用代碼解決問題。因此&#xff0c;我們拋開所有的語法與諸多廢物&…

React項目中發生空白但不報錯的原因分析和解決?

文章目錄 前言組件渲染問題狀態管理問題異步操作問題代碼錯誤但未拋出異常如果我們使用的是chorme瀏覽器的話&#xff0c;可以下載一個開發者工具&#xff0c;例如下圖&#xff1a;代碼審查使用調試工具日志和輸出檢查外部依賴異步操作終極大法&#xff0c;不到萬不得已不可以使…

python+gurobi求解線性規劃、整數規劃、0-1規劃

文章目錄 簡單回顧線性規劃LP整數規劃IP0-1規劃 簡單回顧 線性規劃是數學規劃中的一類最簡單規劃問題&#xff0c;常見的線性規劃是一個有約束的&#xff0c;變量范圍為有理數的線性規劃。如&#xff1a; 使用matlab的linprog函數即可求解簡單的線性規劃問題&#xff0c;可以參…

【Python 訓練營】N_6 求素數

題目 判斷101-200之間有多少個素數&#xff0c;并輸出所有素數。 分析 判斷素數的方法&#xff1a;用一個數分別去除2到sqrt(這個數)&#xff0c;如果能被整除&#xff0c;則表明此數不是素數&#xff0c;反之是素數。 答案 h 0 leap 1 from math import sqrt from sys …