题目:https://leetcode-cn.com/problems/clumsy-factorial/
解题思路:
- 遇到乘法的时候,栈顶元素和新的元素相乘,把结果入栈;
- 遇到除法的时候,栈顶元素和新的元素相除,把结果入栈。
- 遇到加法的时候,元素直接入栈;
- 遇到减法的时候,元素取相反数入栈;
- 所有运算处理过后,把栈里面所有元素相加,就是结果。
coding思路:
- * / + - 的处理:使*/± 分别对应0,1,2,3 使用一个变量循环计数,决定每次计算结果;
- 虽然有stakc容器适配器,但仍然可以使用vector,学会用栈的思想更重要。
class Solution {
public:
int clumsy(int N) {
int result = 0;
int op = 0;
int size = N;
vector<int> stk;
for (int i = 0; i < size; i++) {
if (i == 0) {
stk.push_back(N);
N = N - 1;
continue;
}
int tmp = 0;
if (op == 0) {
tmp = stk.back() * N;
stk.pop_back();
stk.push_back(tmp);
}
if (op == 1) {
tmp = stk.back() / N;
stk.pop_back();
stk.push_back(tmp);
}
if (op == 2) {
stk.push_back(N);
}
if (op == 3) {
stk.push_back(-N);
}
N = N - 1;
op++;
if (op == 4) {
op = 0;
}
}
for (auto &i : stk) {
result += i;
}
return result;
}
};
类似题型:227
[1] https://leetcode-cn.com/problems/clumsy-factorial/solution/ji-shuang-yi-chong-si-lu-liang-dao-ti-mu-c8pq/