如果你是來找答案的,下面先提供你一下思路,拿回去自己再想想看是不是真的不會。
1. 從第二個開始,考慮當前位置有多少種組合時候,想想看,如果能和前乙個位置組成合法的組合的話,那就是上乙個位置的組合方式加上上上個位置的組合方式;如果不能,只能乖乖等於上個位置的組合方式
2. 根據第一條寫出來基礎**後 ,提交看看,自己是不是忘了特殊的0?
'a' -> 1
'b' -> 2
...'z' -> 26
given an encoded message containing digits, determine the total number of ways to decode it.
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 如果發現獨到的字串與某個碼字相等,就將這個子串譯作相應的碼字 然後...