72-笨阶乘

image-20210627214441012

自己的做法

算法思想

四次运算为1个轮回,求n的笨阶乘,则需要n - 1次运算。

使用一个栈,乘除直接算,加减先入栈。最后将栈中元素累加即可。

使用i作为循环变量,初始为0,共循环n- 1次,所以条件为i < n - 1。计算 i % 4。

共有四种情况:0 乘, 1 除, 2 加,3 减。

对于乘除:取出栈顶元素,进行相应运算后入栈。

对于加减:加运算将原数入栈,减运算将相反数入栈。

最后将栈中元素累加。

算法实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution {
public:
int clumsy(int n) {
int num = n - 1;
stack<int> s;
s.push(n);
for(int i = 0; i < n - 1; i++) {
int num1 = s.top();
switch (i % 4) {
case 0:
s.pop();
s.push(num1 * num);
break;
case 1:
s.pop();
s.push(num1 / num);
break;
case 2:
s.push(num);
break;
case 3:
s.push(-num);
break;
}
num--;
}
int sum = 0;
while (!s.empty()) {
sum += s.top();
s.pop();
}
return sum;
}
};

性能分析

时间复杂度:O(n)O(n)

空间复杂度:O(n)O(n)

参考做法


72-笨阶乘
https://zhaoquaner.github.io/2022/05/11/leetcode/栈/72-笨阶乘/
更新于
2022年5月22日
许可协议