21. 合并两个有序链表
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
auto dummy=new ListNode(-1),cur=dummy;
while(l1&&l2)
{
if(l1->val<l2->val)
{
cur=cur->next=l1;
l1=l1->next;
}
else {
cur=cur->next=l2;
l2=l2->next;
}
}
if(l1)cur->next=l1;//l1 表示listnode数目 后一个表示以l1为起点的链表
if(l2)cur->next=l2;
return dummy->next;
}
22.括号生成
最喜欢暴搜了呢 思路好直观
vector <string>ans;
string s;
vector<string> generateParenthesis(int n) {
dfs(n,0,0,s);
return ans;
}
void dfs(int n,int l,int r,string seq){
if(l>n||r>n)return ;
if(l==n&&r==n)ans.push_back(seq);
if(l>r&&r<n) dfs(n,l,r+1,seq+')');
if(l<n) dfs(n,l+1,r,seq+'(');
}
23. 合并K个升序链表
把所有链表放到一个vector里排序即可
ListNode* mergeKLists(vector<ListNode*>& lists) {
auto dummy=new ListNode(-1),cur=dummy;
//ListNode* dummy=new ListNode(-1),cur=dummy;
vector <int>a;
for(auto x :lists){
while(x){
a.push_back(x->val);
x=x->next;
}
}
sort(a.begin(),a.end());
for(auto x:a){
cur->next=new ListNode(x);
cur=cur->next;
}
return dummy->next;
}