标签:
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 };
标签:
原文地址:http://www.cnblogs.com/LCCRNblog/p/5017247.html