LeetCode 20
第一反应是写好几个switch,不过呢因为涉及字符很简单,显然它是可以被放到一个if语句里面的。
那么在维护栈的时候,就需要加一个“垫底”的元素,防止返回栈顶元素的时候发生错误。
class Solution {
public:
bool isValid(string s) {
stack <char> st;
int length=s.size();
int i=0;
st.push('#');
while(i<length)
{
if((s[i]==')'&&st.top()=='(')||(s[i]=='}'&&st.top()=='{')||(s[i]==']'&&st.top()=='['))
{
i++;
st.pop();
}
else
{
st.push(s[i]);
i++;
}
}
if(st.top()=='#')
{
return true;
}
else
{
return false;
}
}
};
LeetCode 21
链表操作
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* tail=new ListNode(0);
ListNode *result=tail;
ListNode* p1=l1;
ListNode* p2=l2;
while(p1&&p2)
{
if(p1->val<=p2->val)
{
result->next=p1;
p1=p1->next;
}
else
{
result->next=p2;
p2=p2->next;
}
result=result->next;
}
while(p1)
{
result->next=p1;
result=result->next;
p1=p1->next;
}
while(p2)
{
result->next=p2;
result=result->next;
p2=p2->next;
}
result=tail;
tail= result->next;
delete(result);
return tail;
}
};
leetcode 22
如果只考有多少种情况,就是直接卡特兰数了,看网上的板子用的递归,背下来再说吧
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
DFS(result,n,n,"");
return result;
}
private:
void DFS(vector<string> &result,int left,int right,string path)
{
if(right<left)
{
return;
}
if(right==0&&left==0)
{
result.push_back(path);
}
if(left>0)
{
DFS(result,left-1,right,path+'(');
}
if(right>0)
{
DFS(result,left,right-1,path+')');
}
}
};