码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode91:Decode Ways

时间:2015-06-18 19:46:33      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:

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.

这道题的关键是如何进行分类的问题。

设状态A[i]表示字符串前i个字符能表示的解码个数。那么它依赖于A[i-1]和A[i-2]。具体的依赖关系如下图:

技术分享

runtime:4ms

class Solution {
public:
    int numDecodings(string s) {
        int length=s.size();
        if(length==0)
            return 0;
            
        int current=s[0]=='0'?0:1;
        int last=1;
        for(int i=1;i<length;i++)
        {
            int tmp=current;
            if(s[i]=='0')
            {
                if(s[i-1]=='1'||s[i-1]=='2')
                     current=last;
                else 
                    return 0;
            }
            else if(s[i-1]=='1'||s[i-1]=='2'&&s[i]<='6')
                current+=last;
            else 
                current=current;
            
            last=tmp;
        }
        
        return current;
    }
};

至于为什么current的初值是s[0]==‘0‘:0?1,last的初值为1,这个含义不是很直观,但是可以通过试验几个字符串来确定。

LeetCode91:Decode Ways

标签:

原文地址:http://blog.csdn.net/u012501459/article/details/46550815

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!