博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 736. Parse Lisp Expression
阅读量:5462 次
发布时间:2019-06-15

本文共 1198 字,大约阅读时间需要 3 分钟。

表达式相关的题目,由于会出现各种嵌套,通常用递归来做。

递归来做主要由两种,如 op e1 e2

1. 通过括号或者空格找到 e1, e2 的范围,递归求解 e1, e2。

2. 直接递归求解,在递归内找 e 的范围。

 

由于本题比较复杂,很难直接把嵌套的表达式找出来,因此采用第二种方法,在递归中处理嵌套表达式,同时处理括号等边界情况。而且由于scope的存在,本题需要一个栈来记录 variable 的值,进入递归的时候压栈,退出的时候出栈。

let非常繁琐,ei 和 expr 都可以是表达式,需要递归求解,而 vi 一定只是个字符串,用 getToken 得到即可。

class Solution {public:    deque
> scopes; int evaluate(string expression) { int pos=0; return eval(expression, pos); } int eval(const string &s, int &pos){ scopes.push_front(unordered_map
()); int value=0; //return val of current expr if (s[pos]=='(') ++pos; string token=getToken(s,pos); //cout << token << endl; if (token=="add"){ // expecting " e1 e2)" int e1=eval(s,++pos); //skip ' ' int e2=eval(s,++pos); value = e1 + e2; }else if (token=="mult"){ int e1=eval(s,++pos); //skip ' ' int e2=eval(s,++pos); value = e1 * e2; }else if (token=="let"){ // expecting " let v1 e1 v2 e2 ... vn en expr) ...." while (pos

 

转载于:https://www.cnblogs.com/hankunyan/p/11184109.html

你可能感兴趣的文章
算法面经之百度
查看>>
JavaWeb基础知识第三部分
查看>>
java并发编程系列一、多线程
查看>>
parseInt的源码阅读
查看>>
不定期更新的毒鸡汤
查看>>
OpenCV数字图像处理(1) 总记
查看>>
接口和类
查看>>
jfarme
查看>>
学习中的小笔记
查看>>
test
查看>>
LVS 负载均衡 keepalive
查看>>
The eleven Day
查看>>
HTTP 无法注册URL 进程不具有命名空间的访问权限
查看>>
spring 基于multipart 文件上传
查看>>
循环冗余校验(CRC)算法入门引导
查看>>
Swift继承的用法
查看>>
【[六省联考2017]组合数问题】
查看>>
数据结构与算法学习 第1季02 链表的基本功能 C++实现
查看>>
Oracle Listener
查看>>
java String spilt 问题
查看>>