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;
}
};
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;
}
};
相关文章推荐
- android事件之onInterceptTouchEvent,dispatchTouchEvent,onTouchEvent,requestDisallowInterceptTouchEvent
- POJ 2406 Power Strings kmp求循环结
- 【细说PHP学习】第十九章 SQL语句设计
- jQuery实现的Div窗口震动效果实例
- android:tint
- 写在Demo战斗系统之前,先用原型工具做套UI第六篇-人物装备UI界面制作
- iOS集成容联云通信 IM
- newInstance()和new()
- (九) Build Variants(构建变种版本)
- mongoDb-学习笔记3
- 利用 Chromium Embedded Framework (CEF) 定制提取 Flash 视频的浏览器
- Shell编程之环境变量配置文件
- 黑马程序员---OC基础---Foundation(下)
- IOS开发 tableview中cell的用法
- 推断字段数据库的存在
- 使用valgrind检查内存
- 【暑假】[实用数据结构]UVa11235 Frequent values
- 机器学习:监督学习和无监督学习
- Docker Mac服务启动问题
- bzoj 2879 分类: bzoj temp...