第529题:
让我们一起来玩扫雷游戏!
给定一个代表游戏板的二维字符矩阵。 'M' 代表一个未挖出的地雷,'E' 代表一个未挖出的空方块,'B' 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字('1' 到 '8')表示有多少地雷与这块已挖出的方块相邻,'X' 则表示一个已挖出的地雷。
现在给出在所有未挖出的方块中('M'或者'E')的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板:
如果一个地雷('M')被挖出,游戏就结束了- 把它改为 'X'。
如果一个没有相邻地雷的空方块('E')被挖出,修改它为('B'),并且所有和其相邻的未挖出方块都应该被递归地揭露。
如果一个至少与一个地雷相邻的空方块('E')被挖出,修改它为数字('1'到'8'),表示相邻地雷的数量。
如果在此次点击中,若无更多方块可被揭露,则返回面板。来源:力扣(LeetCode)
1、按照题意对矩阵进行深度遍历;
如果此时的节点是' M ',直接改为' X ';
否则就遍历该节点的周围所有节点;
计算周围节点中炸弹' M '的个数sum,如果sum>0,就将该节点值改为sum;
否则就将该节点改为' B ',然后再遍历这个阶段的周围所有节点,递归判断来改变节点值;
最终返回board。
2、还可以通过广度优先遍历来遍历整个矩阵判断矩阵元素更改。
第504题:
给定一个整数,将其转化为7进制,并以字符串形式输出。(来自LeetCode)
1、直接按照七进制数的方法来求出结果,可以用StringBuilder或者字符串来求最后结果。
第501题:
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。来源:力扣(LeetCode)
假定 BST 有如下定义:
结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树
1、因为二叉搜索树(BST)的中序遍历是升序的,而又因为树里面有相同的值,那么它的中序遍历是不降序的;
那么需要找出出现频率最高的数,那我们只需要比较这个数的前一个数这个数即可;
每次都更新res集合内的数量最多的数(如果有的话);
首先pre=null,当pre=null时,说明此时now指向的数是中序遍历的第一个数,所以thistime=1;
然后pre后移,当前节点now也后移,比较pre和now的值,如果相同thistime++,不相同就更新thistime;
每次都需要判断thistime和maxtime的大小,因为结果集合内只存入数量最多的值(也就是maxtime的值);
这样一直遍历到最后,得出最后集合,返回结果。
第530题:
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。(来自LeetCode)
1、和上一题一样,也是二叉搜索树,而且是计算树种任意两节点的差的绝对值的最小值;
又因为二叉搜索树的中序遍历是非降序的,那么两个相邻的节点值的差的绝对值肯定比中间相隔节点的节点值的差的绝对值小;
那么只需要比较相邻的节点即可,每次保存最小值。