Skip to content

Commit 63c7b1e

Browse files
committed
栈和队列
1 parent 4f94e9e commit 63c7b1e

File tree

1 file changed

+79
-73
lines changed

1 file changed

+79
-73
lines changed

data_structure/stack_queue.md

Lines changed: 79 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -69,39 +69,42 @@ public:
6969
思路:通过栈保存原来的元素,遇到表达式弹出运算,再推入结果,重复这个过程
7070
7171
```c++
72-
int evalRPN(vector<string> &tokens) {
73-
if (tokens.empty()) {
74-
return 0;
75-
}
76-
auto token = tokens.back();
77-
tokens.pop_back();
78-
if (token != "+" && token != "-" && token != "*" && token != "/") {
79-
return atoi(token);
80-
}
81-
auto rhs = evalRPN(tokens);
82-
auto lhs = evalRPN(tokens);
83-
if (token == "+") {
84-
return lhs + rhs;
85-
} else if (token == "-") {
86-
return lhs - rhs;
87-
} else if (token == "*") {
88-
return lhs * rhs;
89-
} else if (token == "/") {
90-
return lhs / rhs;
91-
}
92-
return -1;
93-
}
94-
95-
int atoi(const string &str) {
96-
if (str[0] == '-') {
97-
return -atoi(str.substr(1));
72+
class Solution {
73+
public:
74+
int evalRPN(vector<string> &tokens) {
75+
if (tokens.empty()) {
76+
return 0;
77+
}
78+
auto token = tokens.back();
79+
tokens.pop_back();
80+
if (token != "+" && token != "-" && token != "*" && token != "/") {
81+
return atoi(token);
82+
}
83+
auto rhs = evalRPN(tokens);
84+
auto lhs = evalRPN(tokens);
85+
if (token == "+") {
86+
return lhs + rhs;
87+
} else if (token == "-") {
88+
return lhs - rhs;
89+
} else if (token == "*") {
90+
return lhs * rhs;
91+
} else if (token == "/") {
92+
return lhs / rhs;
93+
}
94+
return -1;
9895
}
99-
int ret = 0;
100-
for (const auto &item : str) {
101-
ret = ret * 10 + item - '0';
96+
97+
int atoi(const string &str) {
98+
if (str[0] == '-') {
99+
return -atoi(str.substr(1));
100+
}
101+
int ret = 0;
102+
for (const auto &item : str) {
103+
ret = ret * 10 + item - '0';
104+
}
105+
return ret;
102106
}
103-
return ret;
104-
}
107+
};
105108
```
106109

107110
[decode-string](https://leetcode-cn.com/problems/decode-string/)
@@ -114,57 +117,60 @@ int atoi(const string &str) {
114117
思路:通过栈辅助进行操作
115118

116119
```c++
120+
class Solution {
121+
public:
117122
string decodeString(string s) {
118-
if (s.empty()) {
119-
return "";
120-
}
121-
122-
vector<char> stack;
123-
for (const auto &c : s) {
124-
if (c != ']') {
125-
stack.push_back(c);
126-
continue;
123+
if (s.empty()) {
124+
return "";
127125
}
128-
vector<char> subStr;
129-
while (stack.back() != '[') {
130-
subStr.push_back(stack.back());
126+
127+
vector<char> stack;
128+
for (const auto &c : s) {
129+
if (c != ']') {
130+
stack.push_back(c);
131+
continue;
132+
}
133+
vector<char> subStr;
134+
while (stack.back() != '[') {
135+
subStr.push_back(stack.back());
136+
stack.pop_back();
137+
}
131138
stack.pop_back();
132-
}
133-
stack.pop_back();
134139

135-
int digitBegin = stack.size() - 1;
136-
for (; digitBegin != 0; --digitBegin) {
137-
auto val = stack[digitBegin];
138-
if (!('0' <= val && val <= '9')) {
139-
++digitBegin;
140-
break;
140+
int digitBegin = stack.size() - 1;
141+
for (; digitBegin != 0; --digitBegin) {
142+
auto val = stack[digitBegin];
143+
if (!('0' <= val && val <= '9')) {
144+
++digitBegin;
145+
break;
146+
}
147+
}
148+
auto repeat = atoi({
149+
stack.begin() + digitBegin,
150+
stack.end(),
151+
});
152+
stack.resize(digitBegin);
153+
for (int i = 0; i < repeat; ++i) {
154+
stack.insert(stack.end(), subStr.rbegin(), subStr.rend());
141155
}
142156
}
143-
auto repeat = atoi({
144-
stack.begin() + digitBegin,
145-
stack.end(),
146-
});
147-
stack.resize(digitBegin);
148-
for (int i = 0; i < repeat; ++i) {
149-
stack.insert(stack.end(), subStr.rbegin(), subStr.rend());
150-
}
157+
return {
158+
stack.begin(),
159+
stack.end()
160+
};
151161
}
152-
return {
153-
stack.begin(),
154-
stack.end()
155-
};
156-
}
157162

158-
int atoi(const string &str) {
159-
if (str.empty()) {
160-
return 0;
161-
}
162-
int value = 0;
163-
for (const auto &c : str) {
164-
value = value * 10 + c - '0';
163+
int atoi(const string &str) {
164+
if (str.empty()) {
165+
return 0;
166+
}
167+
int value = 0;
168+
for (const auto &c : str) {
169+
value = value * 10 + c - '0';
170+
}
171+
return value;
165172
}
166-
return value;
167-
}
173+
};
168174
```
169175

170176
利用栈进行 DFS 递归搜索模板

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy