码迷,mamicode.com
首页 > 其他好文 > 详细

091. Decode Ways

时间:2016-10-24 23:38:53      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:start   ring   code   return   log   vector   style   ret   bst   

 1 class Solution {
 2 public:
 3     int numDecodings(string s) {
 4         if (s.size() == 0) return 0;
 5         else {
 6             vector<int> ways(s.size(), 0);
 7             if (s[0] >= 1 && s[0] <= 9) ways[0] = 1;
 8             else ways[0] = 0;
 9             if (s[1] >= 1 && s[1] <= 9) ways[1] += ways[0];
10             if (isValid(s.substr(0, 2))) ways[1] += 1;
11             for (int i = 2; i < s.size(); ++ i) {
12                 if (s[i] >= 1 && s[i] <= 9) ways[i] += ways[i - 1];
13                 if (isValid(s.substr(i - 1, 2))) ways[i] += ways[i - 2];
14             }
15             return ways[s.size() - 1];
16         }
17     }
18 private:
19     bool isValid(string str) {
20         int num = (str[0] - 0) * 10 + str[1] - 0;
21         if (num >= 10 && num <= 26) return true;
22         else return false;
23     }
24 };

 超时的一个算法:

 1 int numDecodings(string s) {
 2     if (s.size() == 0) return 0;
 3     return func(s, 0);
 4 }
 5 
 6 int func(string s, int startPos) {
 7     if (startPos >= s.size()) return 1;
 8     else {
 9         if (startPos == s.size() - 1) {
10             if (s[startPos] != 0) return 1;
11             else return 0;
12         }
13         else {
14             if (s[startPos] == 0) return 0;
15             else {
16                 if (s[startPos] >= 1 && s[startPos] <= 9) {
17                     if (startPos + 1 < s.size()) {
18                         if (s[startPos + 1] == 0) {
19                             if (s[startPos] == 1 || s[startPos] == 2) return func(s, startPos + 2);
20                             else return 0;
21                         }
22                         else {
23                             if (s[startPos] >= 3 && s[startPos] <= 9) return func(s, startPos + 1);
24                             else {
25                                 if (s[startPos] == 1 || s[startPos + 1] < 7) return func(s, startPos + 1) + func(s, startPos + 2);
26                                 else  return func(s, startPos + 1);
27                             }
28                         }
29                     }
30                     else return 1;
31                 }
32                 else {
33                     return 0;
34                 }
35             }
36         }
37     }
38 }

 

091. Decode Ways

标签:start   ring   code   return   log   vector   style   ret   bst   

原文地址:http://www.cnblogs.com/shadowwalker9/p/5994910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!