@@ -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:
117122string 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