class Solution {
public:
int numDecodings(string s) {
// if(s.empty()) return 0; // not needed <- non-empty string
int n = s.size();
vector<int> dp(n+1, 0);
dp[0] = 1;
for(int i=1;i<n+1;i++){
if(s[i-1]!='0') dp[i] = dp[i-1];
if(i>1 && (s[i-2]=='1' || (s[i-2]=='2' && s[i-1]<='6'))) dp[i] += dp[i-2];
}
return dp[n];
}
};
怎样处理‘0’在这里很重要:0不可以单独成为一个数,但是可以组成10或20。
从是否可以组成一位数,是否可以组成二位数来思考这道题,会比较简单。