https://leetcode-cn.com/problems/decode-ways/
思路:
d
p
[
i
]
dp[i]
dp[i]表示字符串
s
[
0
…
…
i
)
s[0……i)
s[0……i)的解码方法的总数,那么对于
s
[
i
]
s[i]
s[i],如果它不等于字符0,显然它可以单独解码为一个字符,所以
d
p
[
i
]
=
d
p
[
i
−
1
]
dp[i]=dp[i-1]
dp[i]=dp[i−1];再考虑
s
[
i
−
1
]
、
s
[
i
]
s[i-1]、s[i]
s[i−1]、s[i],如果这两个连起来可以解码为
11
−
26
11-26
11−26中的某个字符,则
d
p
[
i
]
=
d
p
[
i
−
2
]
dp[i]=dp[i-2]
dp[i]=dp[i−2]。
class Solution {
public:
int numDecodings(string s) {
int n=s.size();
vector<int> dp(n+1);
dp[0]=1;
for(int i=1;i<=n;i++)
{
if(s[i-1]!='0')
dp[i]+=dp[i-1];
if(i>=2&&(s[i-2]=='1'||(s[i-2]=='2'&&s[i-1]<='6')))
dp[i]+=dp[i-2];
}
return dp[n];
}
};