队列问题
102 树的层次遍历
自定义的数据结构真的很有用,这样就能将层级也一起记录进去了
107 从底层到上层的二叉树层次遍历
104 之字型
199
广度优先遍历 最短路径 队列
为什么结束条件就是num==0就可以了?如果不是最短的先遍历到呢?
好像不是耶。。最短的肯定就是先为0了。
因为前面的先算,如果它是最短的,那么会先到0. 同理,先到0的,肯定是最短的。
比如当前全是step为1的
【a1】【b1这个是结果的那一条路径】【c1】 当前num全都不是0,如果是0就返回step1了
现在a做了一轮循环,放到后面去了
【b1】【c1】【a2】
【a2】【b2】【c2】 如果a2里面有num为0的,那么直接返回step就是2,如果没有返回的就会变成这样
【b2】【c2】【a3】
······一直到
【a3】【b3】【c3】 如果a3里面有num为0的,那么直接返回step就是3,如果没有返回的就会变成这样
【b3】【c3】【a4】 b3里面存在num为0的了,返回3
现在最大的问题只是重复数字了
创建一个visited数组即可。表示访问过的数字。
先访问过的数字,因为是队列,肯定会先判断里面有没有num为0的情况,如果有就返回了。没有的话,后面直接抛弃这个即可。
递归怎么算呢?
12 --》11,8,3,然后再求11,8,3的最短,取里面最小的。
因为有大量重复数字,也可以传一个数组进去判断。
这道题叫最短路径,有点牵强啊
这个优化更快。因为将最后一步减去了。
如果只差一步就能到0,直接返回step+1