Leetcode #91 Decode Ways

来源:互联网 发布:淘宝开放平台sdk下载 编辑:程序博客网 时间:2024/05/22 09:45

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.

Difficulty:Medium

解法一,NP法,超时了。

int count(string s){        int ans = 0;        int len = s.length();        if(len==0)           return 1;        if(len==1)           return 1;        if(len==2&&s[0]-'0'>=2&&s[1]-'0'>6)           return 1;        if(len==2&&s[0]-'0'<=2&&s[1]-'0'<=6)           return 2;        //cout<<"111"<<endl;        string s1,s2,s3;        s1.push_back(s[0]);        for(int i = 1;i<len;i++)            s2.push_back(s[i]);        ans = ans + count(s1)*count(s2);        //cout<<ans<<endl;        s1.push_back(s[1]);        if(s1[0]-'0'<=2&&s1[1]-'0'<=6)        {            for(int i = 2;i<len;i++)               s3.push_back(s[i]);            ans = ans + count(s3);        }        return ans;    }    int numDecodings(string s) {        if(s.length()==0)           return 0;        return count(s);    }


解法二:用一个数组来记录前i(0-n)个的可能性,然后根据条件判断是nums[i]=nums[i-1]还是nums[i]=nums[i-1]+nums[i-2],条件比较绕,WA了好多次。

int numDecodings(string s) {        int len = s.length();        vector<int> nums(len+1,0);        if(len==0)           return 0;        if(s[0]=='0')           return 0;        if(len==1)           return 1;        nums[0] = 1;nums[1] = 1;                for(int i = 2;i<=len;i++)        {            if(s[i-1]!='0')               nums[i] = nums[i-1];            if(s[i-2]!='0')               if((s[i-2]-'0'==1)||(s[i-2]-'0'==2&&s[i-1]-'0'<=6))                  nums[i] = nums[i]+nums[i-2];        }        return nums[len];    }



0 0
原创粉丝点击