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

Diff for: data_structure/stack_queue.md

+79-73
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)