如果你是來找答案的,下面先提供你一下思路,拿回去自己再想想看是不是真的不會。
1. 從第二個開始,考慮當前位置有多少種組合時候,想想看,如果能和前乙個位置組成合法的組合的話,那就是上乙個位置的組合方式加上上上個位置的組合方式;如果不能,只能乖乖等於上個位置的組合方式
2. 根據第一條寫出來基礎**後 ,提交看看,自己是不是忘了特殊的0?
given an encoded message containing digits, determine the total number of ways to decode it.'a' -> 1
'b' -> 2
...'z' -> 26
for example,
given encoded message 「12」, it could be decoded as 「ab」 (1 2) or 「l」 (12).
the number of ways decoding 「12」 is 2.
這題其實並不是那麼難,所以我這裡只是簡單說一下思路,基礎的思路上面已經給出了,這裡只是補充說明以及寫下一些特殊情況。
1. 對於某個位置來說,我們看從0-i(當前位置的下標)有多少種時,先看從0-(i-1)有多少種,這是一種組合情況;接下來再看從0-(i-2)有多少種,如果當前位置和上乙個位置組成的數字是合法的,那麼我們就多了一種組合方式,那就是這兩個組合在一起,前面到i-2的數目加上前面i-1的數目就是要的數目。
2. 現在考慮0,題目並不把0看作合法的,也就說01並不代表1,所以對於每乙個0,我們要想,首先,它自身一定是不能單獨代表某個數字的;其次,如果它和前面的組合得到的結果同樣不合法,那這個字串就無法拆分成合法的,因此,0的判別非常重要
#include
#include
using
namespace
std;
class solution
int a = 1;
int b = 1;
for (int i = 1; i < s.length(); i++)
if (s[i] == '0')
string tmp = s.substr(i - 1, 2);
int num = stoi(tmp, nullptr);
if (num >= 10 && num <= 26) else
}return b;
}};
演算法分析與設計 作業11 最優字首碼
碼字 q表示字元a,b,c,d 同一序列 0100001 產生兩種解碼 產生歧義 01 00 001 010 00 01 二元字首碼 任何字元的 不能作為其他字元 的字首 利用二元字首碼解碼 從第乙個字元開始依次讀入每個字元 0或1 如果發現讀到的字串與某個碼字相等,就將這個子串譯作對應的碼字 然後...
作業系列 演算法第3章上機實踐報告
1.實踐題目 7 3編輯距離問題 2.問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和...
演算法分析與設計實踐 作業11 哈夫曼編碼
碼字 q表示字元a,b,c,d 同一序列 0100001 產生兩種解碼 產生歧義 01 00 001 010 00 01 二元字首碼 任何字元的 不能作為其他字元 的字首 利用二元字首碼解碼 從第乙個字元開始一次讀入每個字元 0或1 如果發現獨到的字串與某個碼字相等,就將這個子串譯作相應的碼字 然後...