准备一个dfs和bfs的模板吧
来源:互联网 发布:中小企业人才流失数据 编辑:程序博客网 时间:2024/05/22 00:42
733. Flood Fill
给定一个二维矩阵、一个坐标值以及一个新的颜色值,判断二维矩阵中给定坐标点的值与新的颜色值是否相等,如果相等返回原二维矩阵,如果不等将与给定坐标点值相连的相同颜色值都改变为新的颜色值。
思路:递归的对给定坐标周围的值进行循环判断。
class Solution { public int[][] floodFill(int[][] image, int sr, int sc, int newColor) { int color = image[sr][sc]; if (color != newColor) dfs(image, sr, sc, color, newColor); return image; } public void dfs(int[][] image, int r, int c, int color, int newColor) { if (image[r][c] == color) { image[r][c] = newColor; if (r >= 1) dfs(image, r-1, c, color, newColor); if (c >= 1) dfs(image, r, c-1, color, newColor); if (r+1 < image.length) dfs(image, r+1, c, color, newColor); if (c+1 < image[0].length) dfs(image, r, c+1, color, newColor); } }}
[LeetCode] Number of Islands 岛屿的数量
DFS
public int numIslands(char[][] grid) { int count=0; for(int i=0;i<grid.length;i++) for(int j=0;j<grid[0].length;j++){ if(grid[i][j]=='1'){ dfsFill(grid,i,j); count++; } } return count;}private void dfsFill(char[][] grid,int i, int j){ if(i>=0 && j>=0 && i<grid.length && j<grid[0].length&&grid[i][j]=='1'){ grid[i][j]='0'; dfsFill(grid, i + 1, j); dfsFill(grid, i - 1, j); dfsFill(grid, i, j + 1); dfsFill(grid, i, j - 1); }}BFS
public int numIslands(char[][] grid) { int count=0; for(int i=0;i<grid.length;i++) for(int j=0;j<grid[0].length;j++){ if(grid[i][j]=='1'){ bfsFill(grid,i,j); count++; } } return count;}private void bfsFill(char[][] grid,int x, int y){ grid[x][y]='0'; int n = grid.length; int m = grid[0].length; LinkedList<Integer> queue = new LinkedList<Integer>(); int code = x*m+y; queue.offer(code); while(!queue.isEmpty()) { code = queue.poll(); int i = code/m; int j = code%m; if(i>0 && grid[i-1][j]=='1') //search upward and mark adjacent '1's as '0'. { queue.offer((i-1)*m+j); grid[i-1][j]='0'; } if(i<n-1 && grid[i+1][j]=='1') //down { queue.offer((i+1)*m+j); grid[i+1][j]='0'; } if(j>0 && grid[i][j-1]=='1') //left { queue.offer(i*m+j-1); grid[i][j-1]='0'; } if(j<m-1 && grid[i][j+1]=='1') //right { queue.offer(i*m+j+1); grid[i][j+1]='0'; } } }
二叉树的层次遍历
// version 1: BFSpublic class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List result = new ArrayList(); if (root == null) { return result; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while (!queue.isEmpty()) { ArrayList<Integer> level = new ArrayList<Integer>(); int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode head = queue.poll(); level.add(head.val); if (head.left != null) { queue.offer(head.left); } if (head.right != null) { queue.offer(head.right); } } result.add(level); } return result; }}// version 2: DFSpublic class Solution { /** * @param root: The root of binary tree. * @return: Level order a list of lists of integer */ public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> results = new ArrayList<List<Integer>>(); if (root == null) { return results; } int maxLevel = 0; while (true) { List<Integer> level = new ArrayList<Integer>(); dfs(root, level, 0, maxLevel); if (level.size() == 0) { break; } results.add(level); maxLevel++; } return results; } private void dfs(TreeNode root, List<Integer> level, int curtLevel, int maxLevel) { if (root == null || curtLevel > maxLevel) { return; } if (curtLevel == maxLevel) { level.add(root.val); return; } dfs(root.left, level, curtLevel + 1, maxLevel); dfs(root.right, level, curtLevel + 1, maxLevel); }}// version 3: BFS. two queuespublic class Solution { /** * @param root: The root of binary tree. * @return: Level order a list of lists of integer */ public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<List<Integer>>(); if (root == null) { return result; } List<TreeNode> Q1 = new ArrayList<TreeNode>(); List<TreeNode> Q2 = new ArrayList<TreeNode>(); Q1.add(root); while (Q1.size() != 0) { List<Integer> level = new ArrayList<Integer>(); Q2.clear(); for (int i = 0; i < Q1.size(); i++) { TreeNode node = Q1.get(i); level.add(node.val); if (node.left != null) { Q2.add(node.left); } if (node.right != null) { Q2.add(node.right); } } // swap q1 and q2 List<TreeNode> temp = Q1; Q1 = Q2; Q2 = temp; // add to result result.add(level); } return result; }}// version 4: BFS, queue with dummy nodepublic class Solution { /** * @param root: The root of binary tree. * @return: Level order a list of lists of integer */ public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<List<Integer>>(); if (root == null) { return result; } Queue<TreeNode> Q = new LinkedList<TreeNode>(); Q.offer(root); Q.offer(null); // dummy node List<Integer> level = new ArrayList<Integer>(); while (!Q.isEmpty()) { TreeNode node = Q.poll(); if (node == null) { if (level.size() == 0) { break; } result.add(level); level = new ArrayList<Integer>(); Q.offer(null); // add a new dummy node continue; } level.add(node.val); if (node.left != null) { Q.offer(node.left); } if (node.right != null) { Q.offer(node.right); } } return result; }}
阅读全文
0 0
- 准备一个dfs和bfs的模板吧
- BFS和DFS模板
- DFS和BFS模板
- bfs和dfs 模板
- 模板--bfs和dfs
- DFS和BFS模板
- DFS、BFS和Backtracking模板
- 递归,回溯,DFS,BFS的理解和模板
- 递归,回溯,DFS,BFS的理解和模板
- DFS和BFS的思路模板伪代码
- 【算法模板之DFS和BFS】
- 二分图的判定模板(dfs,bfs)
- bfs,dfs遍历图的模板
- BFS&&DFS模板
- BFS/DFS 模板 代码
- BFS/DFS 模板 代码
- BFS/DFS 模板 代码
- BFS/DFS模板
- JSR356标准Java WebSocket实例,包含JAVA客户端与浏览器js客户端
- Ubuntu环境配置caffe开发环境(cuda cudnn + caffe 调试 详细版)
- BUG-sq中${id}被l替换问题
- todo-mvp-clean简化版本
- EasyDemo*接口回调
- 准备一个dfs和bfs的模板吧
- 动态规划之编辑距离
- 关于return的使用方法
- [19]_总结一下find_grep_file_which\whereis_gzip\tar等常用命令的用法
- Union-find and Disjoint Set Union
- 初步讲VIM打造成C++ IDE
- java基础学习——反射机制与动态代理
- EasyDemo*UI布局常见控件(Warning)
- 【机器学习】作业6-EM算法