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

万万没想到是爬台阶的变形,只不过有很多限制。

acmblog里的方法简直神作,只利用了2个指针就完成了任务

当然我们知道求斐波那契数列的时候也可以用两个指针,然后用

int temp=cur;
cur=prev+cur;
prev=temp;

即可求解。

我们想一想设置cur=0或者prev=0会发生什么;

(1)cur=0;下一轮prev=0,cur=thisprev;

(2)prev=0;下一轮cur=0,prev=thiscur;
而且它比数组好的地方在于1简洁2相当于一次操作了两个元素。强

class Solution {
public:
    int numDecodings(string s) {
        int n=s.size();
        if(n==0 || s[0]=='0') return 0;
        
        int pre=0,cur=1;
        for(int i=1;i<=n;i++){
            if(s[i-1]=='0') cur=0;
            
            if(i<2 || !(s[i-2]=='1' || (s[i-2]=='2' && s[i-1]<='6')) )
            pre=0;
            
            int temp=cur;
            cur=cur+pre;
            pre=temp;
        }
        return cur;
    }
};

点赞