上海网站建设制作公司,国外免费推广网站有哪些,征求网站建设,百度不收录网站文章通过万岁!!!
题目:给你一个二维数组,然后给你开始位置,从开始位置开始,与开始位置相同的部分,并且能到达的,都改成一个新的数。思路:就是深度优先或者广度优…
通过万岁!!!
- 题目:给你一个二维数组,然后给你开始位置,从开始位置开始,与开始位置相同的部分,并且能到达的,都改成一个新的数。
- 思路:就是深度优先或者广度优先遍历就可以了,从开始位置,只要能到大,就改成新的数。如果用到广度优先bfs,则需要用一个队列,并且,需要获取队列的长度。但是我用dfs,速度会更加快一点。
- 技巧:bfs或者dfs。
java代码——bfs
class Solution {public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {int tar = image[sr][sc];if (tar == newColor) return image;image[sr][sc] = newColor;int[][] dir = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};Queue<Point> queue = new LinkedList<>();queue.add(new Point(sr, sc));int m = image.length;int n = image[0].length;int nx, ny, size;while (!queue.isEmpty()) {size = queue.size();for (int i = 0; i < size; i++) {Point remove = queue.remove();for (int j = 0; j < 4; j++) {nx = remove.x + dir[j][0];ny = remove.y + dir[j][1];if (nx >= 0 && nx < m && ny >= 0 && ny < n && image[nx][ny] == tar) {image[nx][ny] = newColor;queue.add(new Point(nx, ny));}}}}return image;}class Point {int x, y;public Point(int x, int y) {this.x = x;this.y = y;}}
}
java代码——dfs
class Solution {int[][] dir = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int m, n, tar;public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {tar = image[sr][sc];if (tar == newColor) return image;image[sr][sc] = newColor;m = image.length;n = image[0].length;fillColor(image, sr, sc, newColor);return image;}public void fillColor(int[][] image, int sr, int sc, int newColor) {for (int i = 0; i < 4; i++) {int nx = sr + dir[i][0], ny = sc + dir[i][1];if (nx >= 0 && nx < m && ny >= 0 && ny < n && image[nx][ny] == tar) {image[nx][ny] = newColor;fillColor(image, nx, ny, newColor);}}}
}
总结:题目属于bfs和dfs的最基础题目了。之前简单的总结过dfs和bfs,在这里再次总结一下。dfs主要是按照一个方向,一直往下走。而bfs是一层一层的走,这时候就需要根据不同的问题进行分析了。