LeetCode 20. 有效的括号
题目类型
- 栈
题目链接
思路
方法一:
- 使用栈存储,遇到( { [ 压入栈
- 遇到) } ] 查看栈顶是否匹配
- 结束查看栈是否为空
方法二:
- 使用ascii值
AC代码1
// 方法一:
class Solution {
public:
bool isValid(string s) {
stack<int> stk;
for (int i = 0; i < s.size(); i ++)
{
if (s[i] == '(' || s[i] == '{' || s[i] == '[')
{
stk.push(s[i]);
}
else if (s[i] == ')')
{
if (stk.empty() || stk.top() != '(') return false;
stk.pop();
}
else if (s[i] == '}')
{
if(stk.empty() || stk.top() != '{') return false;
stk.pop();
}
else if (s[i] == ']')
{
if(stk.empty() || stk.top() != '[') return false;
stk.pop();
}
}
return stk.empty();
}
};
AC代码2
// 方法二:
class Solution {
public:
bool isValid(string s) {
stack<int> stk;
for (auto c : s)
{
if (c == '(' || c == '{' || c == '[')
{
stk.push(c);
}
else
{
if (!stk.empty() && abs(stk.top() - c) <= 2) stk.pop();
else return false;
}
}
return stk.empty();
}
};
LeetCode 61. 旋转链表
题目类型
- 旋转链表
题目链接
思路
不难 看代码就好了
AC代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
int n = 0;
ListNode* tail;
// 求长度和尾结点tail;
for (ListNode* t = head; t; t= t->next)
{
tail = t;
n ++;
}
// 处理没有必要的移动
if (!n) return head;
k %= n;
if (!k) return head;
// 找到最后k个结点的前缀结点
ListNode* p = head;
for (int i = 0; i < n - k - 1; i ++) p = p->next;
tail->next = head;
head = p->next;
p->next = nullptr;
return head;
}
};
##
题目类型
题目链接
思路
AC代码
##【未完待更】