Leetcode题解(28)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode题解(28)相关的知识,希望对你有一定的参考价值。

90. Subsets II

题目

技术分享

分析:代码如下

 1 class Solution {
 2 public:
 3     vector<vector<int> > subsetsWithDup(vector<int> &S) {
 4         vector<vector<int> > result;
 5         map<vector<int>, bool> m;
 6         int size = S.size();
 7         for(int i = 0; i < pow(2.0, size); i ++)
 8         {
 9             int tag = i;
10             vector<int> cur;
11             for(int j = size-1; j >= 0; j --)
12             {
13                 if(!tag)
14                     break;
15                 if(tag%2 == 1)
16                 {
17                     cur.push_back(S[j]);
18                 }
19                 tag >>= 1;
20             }
21             sort(cur.begin(), cur.end());
22             if(m.find(cur) == m.end()) 
23             {
24                 m[cur] = true;
25                 result.push_back(cur);
26             }
27         }
28         return result;
29     }
30 };

 -----------------------------------------------------------------------------分割线--------------------------------------------------------------------

91. Decode Ways

题目

技术分享

分析:这道题只需要求解码的种类数,因此一看到这道题目,就条件反射似的想到找递推公式

假设f[i]表示s[0..i]的解码数。在字符串s中,如果s[i]!=‘0‘并且s[i-1]s[i]构成的数大于等于10,小于等于26,则f[i]=f[i-1]+f[i-2]

代码如下:

 1 class Solution {
 2 public:
 3     int numDecodings(string s) {
 4         int len = s.length();
 5         
 6         if(len<=1)
 7         {
 8             if(s[0]==0)
 9             return 0;
10             else
11             return len;
12         }
13         //如果第一位为0,不可能解码
14         if(s[0]==0)
15             return 0;
16         
17         int first=1,second=1;
18         int temp,t;
19         
20         for(int i=1;i<len;i++)
21         {
22             t=0;
23             if(s[i] != 0)
24                 t +=second;
25             temp = (s[i-1]-0)*10+s[i]-0;
26             //一开始我写成temp>=1,不能通过,再仔细看题目,如果是“01”-->temp = 1这种情况是不能解码的,
27             //因此temp>=10才可以
28             if(temp>=10 &&temp <=26)
29                 t +=first;
30             first = second;
31             second = t;
32         }
33         return second;
34     }
35 };

 

以上是关于Leetcode题解(28)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode题解(24)

Leetcode题解(25)

Leetcode题解....ing python

《LeetCode之每日一题》:28. 最小路径和

Leetcode题解(26)

Leetcode题解(30)