您的位置:首页 > 其它

Decode Ways

2015-08-07 17:55 232 查看
class Solution {

public:

int numDecodings(string s) {

if(s.empty()) return 0;

if(s.size()==1&&s=="0") return 0;

if(s.size()==1&&s!="0") return 1;

if(s[0]=='0') return 0;

int dp1 = 1,dp2=1;

for(int i = 1; i < s.size(); i++){

int codeInt = 10 * (s[i - 1] - '0') + s[i] - '0', tmp = dp1; //前一次的一定要保留; 2123 23结合 dp2相当于21的种数;

if(s[i] == '0' && (s[i-1] == '0' || s[i-1] > '2')) return 0;

if (codeInt == 10 || codeInt == 20) dp1 = dp2; //碰到0不加;退回到前前的情况

else if (10 < codeInt && codeInt <= 26) dp1 += dp2; //else 一定要加;

dp2 = tmp;

}

return dp1;

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: