Advertisement
Guest User

Untitled

a guest
May 27th, 2015
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. vector<string> decodeWays(const string& a)
  2. {
  3.     vector<string> res;
  4.     size_t n=a.size();
  5.     if(n==0) return res;
  6.     vector<vector<string>> dp(n);
  7.     if(check(a[0]) dp[0].push_back(a[0]-'0'+'a');
  8.     if(n==1) return dp[0];
  9.     if(check(a[0]) && check(a[1])) dp[1].push_back(dp[0].back()+(a[1]-'0'+'a'));
  10.     if(check(a[0], a[1]) {
  11.         int d=(a[0]-'0')*10+(a[1]-'0');
  12.         dp[1].push_back(d+'a');
  13.     }
  14.     for(size_t i=2;i<n;i++) {
  15.          if(check(a[i])) {
  16.              for(auto e : dp[i-1]){
  17.                  dp[i].push_back(e+(a[i]-'0'+'a'));
  18.              }
  19.          }
  20.          if(check(a[i-1], a[i]) {
  21.              int d=(a[i-1]-'0')*10+(a[i]-'0');
  22.              for(auto e : dp[i-2]){
  23.                  dp[i].push_back(e+(d+'a'));
  24.              }
  25.          }
  26.     }
  27.     return dp[n-1];
  28. }
  29.  
  30. bool check(char one){
  31.     return one!='0';
  32. }
  33.  
  34. bool check(char one, char two) {
  35.     return one=='1' || (one=='2' && two<='6');
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement