091. Decode Ways
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了091. Decode Ways相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章