练习1:

剑指 Offer 04. 二维数组中的查找(240. 搜索二维矩阵 II)

每行每列递增
左下角(右上角)开始查找

  1. function searchMatrix(matrix: number[][], target: number): boolean {
  2. let m = matrix.length, n = matrix[0].length;
  3. let i = m - 1, j = 0;
  4. while (i >= 0 && j < n) {
  5. let cur = matrix[i][j];
  6. if (cur == target) return true;
  7. if (cur > target) {
  8. --i;
  9. } else {
  10. ++j;
  11. }
  12. }
  13. return false;
  14. };

练习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:(推荐)

  1. 上下竖直方向翻转
  2. 对角线翻转 ``` 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
        }
    }
}

}; ```

498. 对角线遍历??