@@ -69,39 +69,42 @@ public:
69
69
思路:通过栈保存原来的元素,遇到表达式弹出运算,再推入结果,重复这个过程
70
70
71
71
```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;
98
95
}
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;
102
106
}
103
- return ret;
104
- }
107
+ };
105
108
```
106
109
107
110
[ decode-string] ( https://leetcode-cn.com/problems/decode-string/ )
@@ -114,57 +117,60 @@ int atoi(const string &str) {
114
117
思路:通过栈辅助进行操作
115
118
116
119
``` c++
120
+ class Solution {
121
+ public:
117
122
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 "";
127
125
}
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
+ }
131
138
stack.pop_back();
132
- }
133
- stack.pop_back();
134
139
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());
141
155
}
142
156
}
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
+ };
151
161
}
152
- return {
153
- stack.begin(),
154
- stack.end()
155
- };
156
- }
157
162
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;
165
172
}
166
- return value;
167
- }
173
+ };
168
174
```
169
175
170
176
利用栈进行 DFS 递归搜索模板
0 commit comments