练习1:
剑指 Offer 04. 二维数组中的查找(240. 搜索二维矩阵 II)
每行每列递增
左下角(右上角)开始查找
function searchMatrix(matrix: number[][], target: number): boolean {
let m = matrix.length, n = matrix[0].length;
let i = m - 1, j = 0;
while (i >= 0 && j < n) {
let cur = matrix[i][j];
if (cur == target) return true;
if (cur > target) {
--i;
} else {
++j;
}
}
return false;
};
练习2:
867. 转置矩阵
先遍历列, 再遍历行
function transpose(A: number[][]): number[][] {
let res: number[][] = [];
for (let i:number = 0; i < A[0].length; i++) {
let tmp: number[] = [];
for (let j: number = 0; j < A.length; j++) {
tmp.push(A[j][i])
}
res.push(tmp);
}
return res
};
面试题 01.07. 旋转矩阵(48. 旋转图像)
题解1:(推荐)
- 上下竖直方向翻转
对角线翻转 ``` function rotate(matrix: number[][]): void { let size: number = matrix.length; // 上下翻转 for (let i: number = 0; i < size / 2; i++) {
[matrix[i], matrix[size - 1 - i]] = [matrix[size - 1 - i], matrix[i]]
}
// 对角线翻转 for (let row: number = 0; row < size; row++) {
for (let col: number = 0; col < row; col++) { [matrix[row][col], matrix[col][row]] = [matrix[col][row], matrix[row][col]] }
}
};
题解2: 同时交换4四个值
var rotate = function(matrix) { let n = matrix[0].length; for (let i = 0; i < Math.floor(n / 2); i++) { for (let j = 0; j < Math.floor((n+1) / 2); j++) { let tmp = matrix[i][j]; matrix[i][j] = matrix[n-1-j][i]; matrix[n-1-j][i] = matrix[n-1-i][n-1-j]; matrix[n-1-i][n-1-j] = matrix[j][n-1-i]; matrix[j][n-1-i] = tmp; } } };
<a name="1EsLZ"></a>
#### [面试题 01.08. 零矩阵](https://leetcode-cn.com/problems/zero-matrix-lcci/)
function setZeroes(matrix: number[][]): void { let rows = new Array(matrix.length).fill(false); let cols = new Array(matrix[0].length).fill(false); // 标记 for (let i = 0; i< matrix.length; i++) { for (let j = 0; j < matrix[0].length; j++) { if (matrix[i][j] == 0) { rows[i] = true; cols[j] = true; } } }
// 设置
for (let i = 0; i< matrix.length; i++) {
for (let j = 0; j < matrix[0].length; j++) {
if (rows[i] || cols[j]) {
matrix[i][j] = 0
}
}
}