算法:矩阵置零
?題目:
給定一個 m x n 的矩陣,如果一個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地算法。示例 1:輸入: [[1,1,1],[1,0,1],[1,1,1] ] 輸出: [[1,0,1],[0,0,0],[1,0,1] ] 矩陣置0,要求常數空間//額外存儲空間 class Solution {public void setZeroes(int[][] matrix) {//行int R = matrix.length;//列int C = matrix[0].length;Set<Integer> rows = new HashSet<Integer>();Set<Integer> cols = new HashSet<Integer>();for (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {if (matrix[i][j] == 0) {//記下對應行和列rows.add(i);cols.add(j);}}}for (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {if (rows.contains(i) || cols.contains(j)) {matrix[i][j] = 0;}}}} }//O(1)空間的暴力 class Solution {public void setZeroes(int[][] matrix) {int MODIFIED = -1000000;//行int R = matrix.length;//列int C = matrix[0].length;for (int r = 0; r < R; r++) {for (int c = 0; c < C; c++) {if (matrix[r][c] == 0) {for (int k = 0; k < C; k++) {if (matrix[r][k] != 0) {matrix[r][k] = MODIFIED;}}for (int k = 0; k < R; k++) {if (matrix[k][c] != 0) {matrix[k][c] = MODIFIED;}}}}}for (int r = 0; r < R; r++) {for (int c = 0; c < C; c++) {if (matrix[r][c] == MODIFIED) {matrix[r][c] = 0;}}}} }class Solution {public void setZeroes(int[][] matrix) {Boolean isCol = false;int R = matrix.length;int C = matrix[0].length;for (int i = 0; i < R; i++) {if (matrix[i][0] == 0) {isCol = true;}for (int j = 1; j < C; j++) {if (matrix[i][j] == 0) {matrix[0][j] = 0;matrix[i][0] = 0;}}}for (int i = 1; i < R; i++) {for (int j = 1; j < C; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}if (matrix[0][0] == 0) {for (int j = 0; j < C; j++) {matrix[0][j] = 0;}}if (isCol) {for (int i = 0; i < R; i++) {matrix[i][0] = 0;}}} }參考鏈接:https://leetcode-cn.com/problems/set-matrix-zeroes/solution/ju-zhen-zhi-ling-by-leetcode/
?
總結
- 上一篇: ❤️详解腾讯面试❤️
- 下一篇: 算法:编辑距离