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

[LeetCode]91.Decode Ways

时间:2015-06-23 23:10:22      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:leetcode   经典面试题   

题目

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.

分析

技术分享

代码

/*---------------------------------------
*   日期:2015-06-23
*   作者:SJF0115
*   题目: 91.Decode Ways
*   网址:https://leetcode.com/problems/decode-ways/
*   结果:AC
*   来源:LeetCode
*   博客:
-----------------------------------------*/
#include <iostream>
using namespace std;

class Solution {
public:
    int numDecodings(string s) {
        int size = s.size();
        if(s[0] == ‘0‘){
            return 0;
        }//if
        if(size == 0 || size == 1){
            return size;
        }//if
        int pre = 1,cur = 1,res;
        for(int i = 1;i < size;++i){
            if(isValid(s[i-1],s[i]) && isValid(s[i])){
                res = pre + cur;
            }//if
            else if(!isValid(s[i-1],s[i]) && isValid(s[i])){
                res = cur;
            }//else
            else if(isValid(s[i-1],s[i]) && !isValid(s[i])){
                res = pre;
            }//else
            else{
                return 0;
            }//else
            pre = cur;
            cur = res;
        }//for
        return res;
    }
private:
    bool isValid(char pre,char cur){
        if(pre == ‘1‘ || (pre == ‘2‘ && cur <= ‘6‘)){
            return true;
        }//if
        return false;
    }
    bool isValid(char cur){
        if(cur >= ‘1‘ && cur <= ‘9‘){
            return true;
        }//if
        return false;
    }
};

int main(){
    Solution s;
    string str("1202111110");
    cout<<s.numDecodings(str)<<endl;
    return 0;
}

运行时间

技术分享

思路2–超时

/*---------------------------------------
*   日期:2015-06-21
*   作者:SJF0115
*   题目: 91.Decode Ways
*   网址:https://leetcode.com/problems/decode-ways/
*   结果:超时
*   来源:LeetCode
*   博客:
-----------------------------------------*/
#include <iostream>
using namespace std;

class Solution {
public:
    int numDecodings(string s) {
        int size = s.size();
        if(size == 0 || size == 1){
            return size;
        }//if
        int index = -1;
        int count = 0;
        helper(s,index,count,"");
        return count;
    }
private:
    void helper(string &s,int index,int &count,string word){
        int size = s.size();
        if(index == size-1){
            ++count;
            cout<<"word->"<<word<<endl;
            return;
        }//if
        // 步长为1或者2
        int num = 0;
        for(int i = 1;i <= 2;++i){
            if(index + i < size){
                num = num * 10 + s[index+i] - ‘0‘;
                if(num <= 26 && num > 0){
                    word += (‘A‘+num-1);
                    helper(s,index+i,count,word);
                    word.erase(word.size()-1);
                }//if
                else{
                    break;
                }
            }//if
        }//for
    }
};

int main(){
    Solution s;
    string str("1234");
    cout<<s.numDecodings(str)<<endl;
    return 0;
}

[LeetCode]91.Decode Ways

标签:leetcode   经典面试题   

原文地址:http://blog.csdn.net/sunnyyoona/article/details/46611499

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