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

Leetcode题解(六)

时间:2015-12-03 21:07:47      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

21、Merge Two Sorted Lists

题目

技术分享

直接上代码:

class Solution {
public:
    ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
        ListNode *helper=new ListNode(0);
        ListNode *head=helper;
        while(l1 && l2)
        {
             if(l1->val<l2->val) helper->next=l1,l1=l1->next;
             else helper->next=l2,l2=l2->next;
             helper=helper->next;
        }
        if(l1) helper->next=l1;
        if(l2) helper->next=l2;
        return head->next;
    }
};

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

22、Generate Parentheses

题目

技术分享

题目分析:

在构造这个括号字符串时,分别用left和right表示剩下的左括号和右括号个数,str表示已经构造出的字符串。通过分析,可以找出如下关系:

a.当left==right时,只能进行str+‘(’操作;

b.当left<right并且left != 0,可以进行str+‘)‘或者str+‘(’操作,相应的符号个数将减少1;

c.当left>right,这种情况肯定不存在;

实现代码如下:

 1 class Solution {
 2 public:
 3     vector<string> generateParenthesis(int n) {
 4         vector<string> res;
 5         string str="";
 6         generateParenthesis(res,n,n,str);
 7 
 8         return res;
 9 
10     }
11     void generateParenthesis(vector<string> &res,int left,int right,string str)
12     {
13         if(0 == left)
14         {
15             for(int i=0;i<right;i++)
16                 str += );
17 
18             res.push_back(str);
19             return;
20         }
21         else
22         {
23             if(left == right)
24                 generateParenthesis(res,left-1,right,str+();
25             else
26             {
27                 generateParenthesis(res,left-1,right,str+();
28                 generateParenthesis(res,left,right-1,str+));
29             }
30         }
31     }
32 };

上面的实现过程是递归实现,既然能用递归,那就能通过使用stack的方式直接求解而不用递归。

非递归的方法:每次stack压栈压入一个三元组(left,righ,str)。

 1 struct node
 2 {
 3     node(int l,int r,string s)
 4     {
 5         left = l;
 6         right = r;
 7         str = s;
 8     }
 9     int left;
10     int right;
11     string str;
12 };
13  
14 class Solution {
15 public:
16     vector<string> generateParenthesis(int n) {
17         vector<string> res;
18         string str="";
19         stack< node* > mystack;
20         int l = n-1;
21         int r = n;
22 
23         node *temp = new node(l,r,"(");
24         mystack.push(temp);
25         while(!mystack.empty())
26         {
27             temp = mystack.top();
28             mystack.pop();
29             if(temp->left == 0)
30             {
31                 for(int i=0;i<temp->right;i++)
32                     temp->str += );
33                 res.push_back(temp->str);
34                 continue;
35             }
36             if(temp->left == temp->right)
37             {
38                 mystack.push(new node(temp->left -1,temp->right,temp->str+());
39             }
40             else
41             {
42                 mystack.push(new node(temp->left -1,temp->right,temp->str+());
43                 mystack.push(new node(temp->left,temp->right - 1,temp->str+)));
44             }
45         }
46         return res;
47 
48     }
49 };

 

Leetcode题解(六)

标签:

原文地址:http://www.cnblogs.com/LCCRNblog/p/5017247.html

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