Decode Ways

A message containing letters from A-Z is being encoded to numbers using the following mapping:

'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.

 

用回溯写了一个,TLE。看到了个用DP的算法,非常赞,就贴过来了。其中三个量循环赋值是为了节省空间。

int numDecodings(string s) {
    if(!s.size()||s[0]=='0')return 0;
    int cur_2 = 1,cur_1 = 1,cur = 0;

    for(int i = 2;i<=s.size();i++){
        if(s[i-1]!='0')cur+=cur_1;
        if(s[i-2]=='1'||(s[i-2]=='2'&&s[i-1]<'7'))cur+=cur_2;
        cur_2 = cur_1;
        cur_1 =  cur;
        cur = 0;
    }
    return cur_1;
}

  还记得聪哥的vim上设置的默认头:最容易想到的方法通常不是最佳的。

posted on 2014-03-17 15:15  pengyu2003  阅读(98)  评论(0编辑  收藏  举报

导航