leetcode 1矩陣
阿新 • • 發佈:2018-11-23
作為做這道題做到有點想哭的我,現在心情複雜,原理使用曼哈頓距離,bfs斜向分析;程式碼以下,轉自另一位博主程式碼,因為,c++與java有點不一樣,而我並不知道如何將vector<vector<int>> martix轉換作為返回值返回,所以我的內心是崩潰的,這個暫時留待之後解決,先這樣。 class Solution { private static int find(int[][] matrix, int i, int j){ int len = Math.max(matrix.length, matrix[0].length); for (int k = 1; k < len; k++){ int m = i - k, n = j, temp = k; while (temp > 0){ if (!(m >= matrix.length || m < 0)) { if (!(n >= matrix[0].length || n < 0)) { if (matrix[m][n] == 0) return k; } } m++; n++; temp--; } temp = k; while (temp > 0){ if (!(m >= matrix.length || m < 0)) { if (!(n >= matrix[0].length || n < 0)) { if (matrix[m][n] == 0) return k; } } m++; n--; temp--; } temp = k; while (temp > 0){ if (!(m >= matrix.length || m < 0)) { if (!(n >= matrix[0].length || n < 0)) { if (matrix[m][n] == 0) return k; } } m--; n--; temp--; } temp = k; while (temp > 0){ if (!(m >= matrix.length || m < 0)) { if (!(n >= matrix[0].length || n < 0)) { if (matrix[m][n] == 0) return k; } } m--; n++; temp--; } } return 0; } public int[][] updateMatrix(int[][] matrix) { int[][] distance = new int[matrix.length][matrix[0].length]; for (int i = 0; i < matrix.length; i++){ for (int j = 0; j < matrix[0].length; j++){ if (matrix[i][j] == 0){ distance[i][j] = 0; } else { distance[i][j] = find(matrix, i, j); } } } return distance; } }