1.通过浏览器的前进后退理解栈( 三 )

stack = new YKDStack<>();//遍历字符串,并与栈顶比较for (int i = 0; i < code.length(); i++) {//取出字符串中的元素char c = code.charAt(i);//左括号直接压入栈中if (c == '(' || c == '{' || c == '[') {stack.push(c);continue;}//匹配右括号与栈顶元素,不为成对则返回falseif (c == ')') {if (stack.peek() != null && stack.peek() == '(') {stack.pop();} else {return false;}}if (c == '}') {if (stack.peek() != null && stack.peek() == '{') {stack.pop();} else {return false;}}if (c == ']') {if (stack.peek() != null && stack.peek() == '[') {stack.pop();} else {return false;}}}//匹配成功后栈内元素应为空return stack.peek() == null;}
算法实战——行编辑器
? 在计算机最初,没有很强大的编辑器,当时只有行编辑器 。行编辑器如何使用呢?
? 用户从终端输入的程序或数据,并将最后结果显示到屏幕上 。由于用户输入时,不能保证不出差错,因此,若在编辑程序中,每接受一个字符即输出到屏幕上的做法显然不恰当 。较好的做法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后一次性将其显示到屏幕上 。允许用户输入出错并及时改正 。
? 以#表示退格,删除上一个字符 。以@表示退行,删除一整行 。看几个简单的例子:
输入:abc#dd输出:abdd输入:abc@dd输出: dd输入:a#b#d#ce输出:ce输入:ab##dce输出:dce
? 我们通过栈,可以很简单的实现这种编辑器 。具体代码如下:
// 行编辑器的输入public static String input(String source) {YKDStack stack = new YKDStack<>();// 遍历每个字符for (int i = 0; i < source.length(); i++) {char c = source.charAt(i);// 遇到 # 则 popif (c == '#') {if (stack.peek() != null) {stack.pop();}continue;}// 遇到 @ 则清空,相当于重新 new YKDStack() 。if (c == '@') {stack = new YKDStack<>();continue;}stack.push(c);}// 将栈中元素依次pop出来,拼接在字符串前面String result = "";while(stack.peek() != null){result = stack.pop() + result;}return result;}
算法实战——简单寻路算法
自动寻路
? 在实际游戏场景中,地图是非常复杂的,但是无论什么地图,自动寻路都可以简化为 3 要素:可移动区域,不可移动区域,起点和终点 。
? 如果我把地图划分为多个方格,每个方格表示移动的最小单位,我们便能将整个地图投影成如下二维视觉:
? 深灰色的区块为障碍物,白色区块表示可行动的区域,图中分别标注了起点和终点 。
? 假设,现在每一步都只能从一个方格移动到其相邻的方格,并且只能上下左右移动,那么如何找寻现一条从起点移动到终点路径呢?
思路
? 首先我们分析一下我们遇到的问题:
如何存储整个地图信息,包括障碍物,可移动区域?如何存储寻找自动寻路路径? 地图信息
? 对于这样的二维地图,我们可以用二维数组进行存储,同时因为每个方格都有不同的状态,为了方便显示,我们可以利用字符存储每个方格信息 。
用#表示障碍物,空格表示可移动区域 。
代码如下:
char[][] map = {{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},{'#', ' ', ' ', '#', ' ', ' ', ' ', '#', ' ', '#'},{'#', ' ', ' ', '#', ' ', ' ', ' ', '#', ' ', '#'},{'#', ' ', ' ', ' ', ' ', '#', '#', ' ', ' ', '#'},{'#', ' ', '#', '#', '#', ' ', ' ', ' ', ' ', '#'},{'#', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', '#'},{'#', ' ', '#', ' ', ' ', ' ', '#', ' ', ' ', '#'},{'#', ' ', '#', '#', '#', ' ', '#', '#', ' ', '#'},{'#', '#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}};