中级农民
- 积分
- 110
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-1-8
- 最后登录
- 1970-1-1
|
- class Solution {
- public:
- int numDecodings(string s) {
- if(s.size() == 0){
- return 0;
- }
- else if(s.size() == 1)
- {
- return s[0] != '0' ? 1 : 0;
- }
- else if(s.size() == 2){
- if(s[0] != '0' && s[1] == '0')
- return 0;
- if(s[0] != '0' && s[1] != '0' && (sum(s[0])*10 + sum(s[1])) <= 26 )
- return 2;
- else if (s[0] != '0' && s[1] != '0' && (sum(s[0])*10 + sum(s[1])) > 26 )
- return 1;
- else
- return 0;
- }
-
- int *num = new int[s.size()];
- num[0] = s[0] != '0' ? 1 : 0;
- num[1] = (s[0] != '0') && (s[1] != '0') + (s[0] != '0') && (s[1] != '0') && ((sum(s[0])*10 + sum(s[1])) <= 26);
-
- for(int i = 2; i<s.size(); i++){
- num[i] = 0;
- if(s[i] != '0'){
- num[i] += num[i-1];
- }
-
- if(s[i-1] != '0' && s[i] != '0' && ((sum(s[i-1])*10 + sum(s[i])) <= 26)){
- num[i] += num[i-2];
- }
- }
- return num[s.size()-1];
-
- }
-
- int sum(char c){
- return c - '0';
- }
- };
复制代码 |
|