前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
什么事逆波兰表达式呢?
一图胜千言:
- 这题和前面做的消除字母不是差不多嘛,那一题是消除字母,这里是做运算,哎呦,思路很一致
- 在仔细想一想,什么时候做运算呢?当然是遇到运算符的时候做运算,昨晚运算之后呢再把运输后的结果放入栈中
- 哎呦,经过简单的分析是不是很清晰了呢?那下面我们来写代码吧!
- 声明栈 Deque stack = new LinkedList();
- 遍历数组 for (int i = 0; i < tokens.length; ++i) {}
- 如果碰见+号了,那么弹出两个元素,把它们相加的和放到栈中
if ("+".equals(tokens[i])) { stack.push(stack.pop() + stack.pop()); }
4.其余运算符和加法的逻辑是一样的
else if ("-".equals(tokens[i])) { stack.push(-stack.pop() + stack.pop()); } else if ("*".equals(tokens[i])) { stack.push(stack.pop() * stack.pop());
- 除法的不太一样哦,我们来分析下除法的逻辑
int temp1 = stack.pop(); int temp2 = stack.pop(); stack.push(temp2 / temp1);
- 遇见正常的树就把它转换为integer类型放入栈中即可
public int evalRPN(String[] tokens) { Deque<Integer> stack = new LinkedList(); for (int i = 0; i < tokens.length; ++i) { if ("+".equals(tokens[i])) { // leetcode 内置jdk的问题,不能使用==判断字符串是否相等 stack.push(stack.pop() + stack.pop()); // 注意 - 和/ 需要特殊处理、 } else if ("-".equals(tokens[i])) { stack.push(-stack.pop() + stack.pop()); } else if ("*".equals(tokens[i])) { stack.push(stack.pop() * stack.pop()); } else if ("/".equals(tokens[i])) { int temp1 = stack.pop(); int temp2 = stack.pop(); stack.push(temp2 / temp1); } else { stack.push(Integer.valueOf(tokens[i])); } } return stack.pop(); }
虽然这几天的提示比较简单的,但是我们不能掉以轻心,后面也会有中等题