#
Decode Ways Problems
By
blackntt
#
Problem
Cho một chuỗi số N kí tự. Tìm số cách có thể giải mã chuỗi số đó. Biết bảng mã hoá như sau: A -> 1, B -> 2, …, Z -> 26.
Ví dụ “226” – kết quả là 3 vì (2|26, 22|6, 2|2|6) – 3 cách có thể giải mã.
#
Solution
#
Media
#
Dynamic programming
Độ phức tạp thời gian: O(n)
Độ phức tạp không gian: O(n)
int numDecodings(string s) {
vector< int > dp(s.length()+1,0);
dp[s.length()]=1;
if(s[s.length()-1] >= '1'&&s[s.length()-1] <= '9'){
dp[s.length()-1]=1;
}
int i=s.length()-2;
while(i>=0){
int ways = 0;
if(i+1<s.length() && (s[i] == '1'||(s[i] == '2' && s[i+1] <= '6'))){
ways=dp[i+2];
}
if(s[i] >= '1' && s[i] <= '9'){
ways += dp[i+1];
}
dp[i] = ways;
i--;
}
return dp[0];
}