问题:http://www.careercup.com/question?id=5120347909128192
大意:指定26个字符的编码方式,即A对应1,B对应2,以此类推,Z对应26,现出一串数字序列,问有多少种方式能对其进行解码
实际上是一个简单的动态规划,设s是我们要解码的数字序列,令dp[i]表示s[i,s.length)有多少种解码方式,则状态方程为:
if s[i] == 0, dp[i] = 0
else if s[i] <= 2 && s[i+1] <= 6, dp[i] = dp[i+1] + dp[i+2]
else dp[i] = dp[i+1]
#include <iostream>
#include <string>
using namespace std;
class Decoder{
private:
void decodeInAllWays(ostream& out, string& res, const string& text, int i, const string& separator){
//whole text decode done
if(i == text.size()){
out << res << separator;