矩阵置零(073)
先看代码
class Solution {
public void setZeroes(int[][] matrix) {
boolean col0_flag = false;
int row = matrix.length;
int col = matrix[0].length;
for (int i = 0; i < row; i++){
if (matrix[i][0] == 0) col0_flag =true;
for (int j = 1; j < col; j++){
if(matrix[i][j] == 0){
matrix[i][0] = matrix[0][j] = 0;
}
}
}
for (int i = row-1; i>=0; i--){
for (int j = col-1; j >=1; j--){
if (matrix[i][0] == 0 || matrix[0][j] == 0){
matrix[i][j] = 0;
}
}
if (col0_flag) matrix[i][0] = 0;
}
}
}
- 分析
利用矩阵自身作为标记位 , 矩阵第0行标记每一列是否被污染, 第0列标记每一行
接下来来处理0行0列自身是否会被污染, 0行我们可以使用(0,0)做标记, 0列额外用col0_flag
螺旋矩阵(054)
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
int lef = 0, rig = matrix[0].length -1;
int top = 0, but = matrix.length -1;
int idx = 0;
Integer[] res = new Integer[(rig+1)*(but+1)];
while(true){
for (int i = lef; i <= rig; i++) res[idx++] = matrix[top][i];
if (++top > but) break;
for (int i = top; i <= but; i++) res[idx++] = matrix[i][rig];
if (--rig < lef) break;
for (int i = rig; i >= lef; i--) res[idx++] = matrix[but][i];
if (--but < top) break;
for (int i = but; i >= top; i--) res[idx++] = matrix[i][lef];
if (++lef > rig) break;
}
return Arrays.asList(res);
}
}
- 分析
简单围绕 (第0行→最后一列→最后一行 → 第0列)循环写入
旋转图像(048)
先看代码
class Solution {
int n;
public void rotate(int[][] matrix) {
n = matrix.length;
for (int i = 0; i < n; i++){
for (int j = i; j < n; j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
for (int[] row : matrix){
reverse(row);
}
}
private void reverse(int[] row){
int i = 0, j = n-1;
while (i < j){
int temp = row[i];
row[i] = row[j];
row[j] = temp;
i++;
j--;
}
}
}
- 分析
先以对角线翻转, 再每行各自翻转
- 感悟
数学真神奇把
搜索二维矩阵(240)
先看代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length;
int row = 0, col = n - 1;
while (row < m && col >=0){
if (target > matrix[row][col]) row+=1;
else if (target < matrix[row][col]) col-=1;
else return true;
}
return false;
}
}
- 分析
从右上角开始搜索, 利用矩阵从左到右递增、从上到下递增的特性, 每次比较可以排除一行或一列, 时间复杂度O(m+n)。