1-leetcode73. 矩阵置零
注意:×
- 注意第一行和第一列如果检查到了0,直接
break
- 也可以使用
HashSet
方法,直接把0的数字对应的横纵坐标放在两个不同的HashSet
当中,最后如果HashSet
中Contain
了当前数字下标中的一个,就直接给0
public void setZeroes(int[][] matrix) {int n = matrix.length;int m = matrix[0].length;int firstRowFlag = 0, firstColFlag = 0;for (int i = 0; i < n; i++) {if (matrix[i][0] == 0) {firstColFlag = 1;break;}}for (int i = 0; i < m; i++) {if (matrix[0][i] == 0) {firstRowFlag = 1;break;}}// 开始找0for (int i = 1; i < n; i++) {for (int j = 1; j < m; j++) {if (matrix[i][j] == 0) {matrix[i][0] = 0;matrix[0][j] = 0;}}}// 开始清理for (int i = 1; i < n; i++) {for (int j = 1; j < m; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}if (firstRowFlag == 1){Arrays.fill(matrix[0], 0);}if (firstColFlag == 1){for (int i = 0; i < n; i++) {matrix[i][0] = 0;}}}
2-leetcode54. 螺旋矩阵
注意:×
- 看了Labuladong的解题思路,确实是一道没写过的不会,写过的很难忘的一道题
- 注意各个边界的调整即可,思路应该不会再忘的
public List<Integer> spiralOrder(int[][] matrix) {int n = matrix.length;int m = matrix[0].length;int upSide = 0, downSide = n - 1;int leftSide = 0, rightSide = m - 1;ArrayList<Integer> res = new ArrayList<>();while (res.size() < m*n){if (upSide <= downSide){for (int i = leftSide; i <= rightSide; i++) {res.add(matrix[upSide][i]);}upSide++;}if (leftSide <= rightSide){for (int i = upSide; i <= downSide; i++) {res.add(matrix[i][rightSide]);}rightSide--;}if (upSide <= downSide){for (int i = rightSide; i >= leftSide; i--) {res.add(matrix[downSide][i]);}downSide--;}if (leftSide <= rightSide){for (int i = downSide; i >= upSide; i--) {res.add(matrix[i][leftSide]);}leftSide++;}}return res;}
3-leetcode48. 旋转图像
注意:×
- 注意对角线遍历是
for(i = 0) for(j = i)
public void rotate(int[][] matrix) {int n = matrix.length;int m = matrix[0].length;for (int i = 0; i < n; i++) {for (int j = i; j < m; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = temp;}}for (int[] ma : matrix) {reverse(ma);}}private void reverse(int[] ma) {int n = ma.length;int left = 0;int right = n-1;while (left<right){int temp = ma[left];ma[left] = ma[right];ma[right] = temp;left++;right--;}}
4-leetcode240. 搜索二维矩阵 II
注意:×
- 看完解析就会了,主要是思路
public boolean searchMatrix(int[][] matrix, int target) {int n = matrix.length;int m = matrix[0].length;// 从最右上角开始便利,如果比目标数字大,就往左边走,如果比目标数字小,就往下面走int iIndex = 0;int jIndex = m - 1;while (iIndex < n && jIndex >= 0){if (matrix[iIndex][jIndex] == target){return true;}else if (matrix[iIndex][jIndex] > target){jIndex--;}else {iIndex++;}}return false;}