解碼數字序列

2021-06-22 22:20:18 字數 1156 閱讀 8334

問題:

大意:指定26個字元的編碼方式,即a對應1,b對應2,以此類推,z對應26,現出一串數字序列,問有多少種方式能對其進行解碼

實際上是乙個簡單的動態規劃,設s是我們要解碼的數字序列,令dp[i]表示s[i,s.length)有多少種解碼方式,則狀態方程為:

if s[i] == 0, dp[i] = 0

else if s[i] <= 2 && s[i+1] <= 6, dp[i] = dp[i+1] + dp[i+2]

else dp[i] = dp[i+1]

#include #include using namespace std;

class decoder

char c = text[i];

//check if current head is decodable

if(c == '0') return;

//decode head as a one-code word

res.push_back(c - '1' + 'a');

decodeinallways(out, res, text, i + 1, separator);

res.resize(res.size() - 1);

//try to decode head as a two-code word

if(c <= '2' && i + 1 < text.size() && text[i+1] <= '6')

}public:

void decodeinallways(ostream& out, const string& text, const string& separator = "\n")

int getwaystodecode(const string& text)

else dp[i] = 0;

}//free memory before return

len = dp[0];

delete dp;

return len;

}};int main()

; decoder decoder;

for(int i = 0; i < sizeof(text)/sizeof(text[0]); ++i)

return 0;

}

Number Sequence 數字序列

一 杭電原題摘錄 二.題目分析 很容易就能想到遞迴,但是超出記憶體 int fac int a,int b,int n 超出記憶體 因為f n 的值要對7取餘,所以不難想到f n 的值可能存在週期.那我們就去找週期,看是否存在?週期不就是一直重複t個數,那麼我們就說這組數存在週期,且為t.在這個問題...

程式設計題 數字序列

信服君最近在研究一種有趣的數字串,例如11135917171513 你可能發現了,除了開始的三個數字為1以外,後面的數字均由三位數字相加得到,現在信服君想知道在給定任意起始三個數字後,第n位是多少。輸入描述 首行輸入乙個整數t 1 t 1000 表示有t組資料,每組資料給出四個數字a b c n其中...

Leetcode 數字序列翻譯

有一種將字母編碼成數字的方式 a 1,b 2 z 26 現在給一串數字,返回有多少種可能的解碼結果 示例1複製 12 複製 22種可能的解碼結果 ab 或 l 思路 對於乙個字元,分析其能否單獨翻譯成乙個單詞,以及能否組合翻譯成乙個單詞 特別的 對於含有0的數字,其只能夠與前面的1或2組合成 10 ...