题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给你一个数字 n,求其笨阶乘。所谓的笨阶乘,就是把原本的从 n 乘到 1 改成按照 * / + - 顺序执行符号的运算式。

思路分享

  • 对于运算表达式就要想到通过栈可以处理,由于运算符有优先级,所以遇到一个数就马上计算是不可行的。

  • 乘除立即算,加减先入栈。这样子下来,栈内最后只剩下待加值,求和即可。

    https://leetcode.cn/problems/clumsy-factorial/solutions/693117/fu-xue-ming-zhu-yu-dao-cheng-chu-li-ji-s-furg/

  • 为什么乘除立即算呢?因为乘除是高优先级运算,即使把乘除入栈了,后续计算时也要优先拿出来算完再与其它数算,倒不如入栈前就先算了。

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def clumsy(self, n: int) -> int:
nums = [n]
opr = 0
for i in range(n-1, 0, -1):
if opr == 0:
nums[-1] *= i
elif opr == 1:
nums[-1] = int(nums[-1] / float(i))
elif opr == 2:
nums.append(i)
elif opr == 3:
nums.append(-i)
opr = (opr+1)%4

return sum(nums)