优化(记忆化搜索):
可以发现,如果没有缓存,(6,6)和(7,6)都需要多次计算
2.
假设没有括号,设置一个int num和一个栈,遇到数字置num,遇到符号,把num和符号一起压栈,num清空。但当遇到栈顶是或\时,栈中弹出两个元素做乘除,然后再压栈。
如num=9且遇到+时,栈顶是
∗
*
∗,则弹出64和
∗
*
∗,求649=576,把576和下一个+一起压栈。最后栈中只剩+和-
如果有括号:
代码:
- LinkedList是双端队列
- 常规思路
不为0的地方,value只依赖于左上角的值(左上角+1) - 空间压缩
初步:用一维数组进行压缩
优化:一条斜线一条斜线的计算,遍历求斜线的最大值,记录最大值,只用一个int就可以了。
- if(col>0)这里的条件分支决定了斜线的起始点,由右下往左下移动,最后向左上移动(L型)
四种可能性求最大值