力扣刷题之广度优先遍历
迪恩_Emma
喜欢看书的Java开发
展开
-
207. 课程表(中等)
思路:广度优先遍历,是拓扑排序,主要是不能出现环利用一个入度表代码:class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { if(numCourses==0) return false; //这里若数组为空,返回的是true而不是false if(prerequisites.length==0) return true; .原创 2021-06-08 10:08:01 · 57 阅读 · 0 评论 -
200. 岛屿数量(中等)
思路:广度优先遍历,将每一块的第一个1加入队列,然后往外扩散开,直到遇到水(0)代码:class Solution { int row; int col; public int numIslands(char[][] grid) { row=grid.length; col=grid[0].length; //四个方位 int[][] directions={{-1,0},{0,-1},{1,0},{0,1}}; //设置marked记录已走.原创 2021-06-08 09:24:28 · 77 阅读 · 0 评论 -
102. 二叉树的层序遍历(中等)
思路:广度优先遍历代码:class Solution { List<List<Integer>> res=new ArrayList<>(); public List<List<Integer>> levelOrder(TreeNode root) { if(root==null){ return res; } bfs(root); return res;.原创 2021-06-02 10:52:03 · 67 阅读 · 0 评论 -
17. 电话号码的字母组合(中等)
思路:广度优先遍历代码:class Solution { public List<String> letterCombinations(String digits) { List<String> res=new ArrayList<>(); if(digits.length()==0) return res; StringBuilder path=new StringBuilder(); HashMap<Charac.原创 2021-05-25 10:30:00 · 78 阅读 · 0 评论 -
剑指 Offer 37. 序列化二叉树(困难)
思路:序列化:相当于一个层序遍历,使用广度优先遍历,与别的题目的区别是:如果该节点不是null,并且如果该节点的左、右节点中有null,也要把该节点算上反序列化:判断的条件有点不同,在不是null的情况下才把节点接在根节点下,并且加入队列中代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ..原创 2021-05-02 22:38:36 · 68 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列(中等)
思路:此题只是判断数组是否符合条件,只需要判断数组即可,不用返回数组方法一:深度优先搜索(递归)方法二:单调栈代码:方法一:class Solution { public boolean verifyPostorder(int[] postorder) { return dfs(postorder,0,postorder.length-1); } private boolean dfs( int[] postorder, int.原创 2021-04-30 10:40:00 · 103 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III(中等)
思路:层序遍历(BFS)+奇偶层逻辑判断代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public List<List<Inte.原创 2021-04-29 09:49:03 · 68 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II(简单)
思路:广度优先遍历代码:class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res=new ArrayList<>(); //是Queue不是List Queue<TreeNode> queue=new LinkedList<>(); if(root!.原创 2021-04-28 10:03:05 · 183 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树(中等)
思路:广度优先遍历代码:class Solution { public int[] levelOrder(TreeNode root) { if(root==null){ //创建空数组的格式为new int[0] return new int[0]; } Queue<TreeNode> queue=new LinkedList<>(); queue.add(root).原创 2021-04-27 11:09:43 · 142 阅读 · 0 评论 -
210. 课程表 II(中等)
思路:使用广度优先,记录入度数每次出队列,都把该数的后继节点的入度数-1,如果入度变为0,就入队列把队列里的顺序记录到数组中代码:class Solution { public int[] findOrder(int numCourses, int[][] prerequisites) { // if(numCourses==0) // return new int[0]; // if(prerequisites.length=.原创 2021-04-09 09:51:33 · 88 阅读 · 0 评论 -
279. 完全平方数(中等)
思路:使用广度优先,设置一个队列、一个记录表代码:class Solution { public int numSquares(int n) { if(n==0||n==1) return n; //创建队列 Queue<Integer> queue=new LinkedList<>(); queue.offer(n); //visited boolean[] visited=new boolean[n]; i.原创 2021-04-08 10:03:08 · 132 阅读 · 1 评论 -
207.课程表(中等)
思路:i)先遍历一遍数组,把第二个元素的入度置为0存入新建的入度数组当中inDegree[]ii)遍历一遍所有课程,如果入度为0,则存入队列中iii)队列从前到后弹出元素,并加入数组res中记录已修的课程搜寻数组中第二个元素是否与该弹出元素一致,一致则表明这是第一个元素的先修课程将第一个元素的入度-1,判断若该元素的入度变为0了,则加入队列代码:class Solution { public boolean canFinish(int numCourses, in.原创 2021-04-07 09:40:43 · 84 阅读 · 0 评论 -
126. 单词接龙 II(困难)
思路:求最短路径问题,很自然地想到要用广度优先遍历代码:class Solution { public List<List<String>> findLadders(String beginWord, String endWord, List<String> wordList) { //先将wordList放到哈希表中 Set<String> wordSet=new HashSet<>(wordList); .原创 2021-04-05 14:59:18 · 207 阅读 · 1 评论