Leetcode系列:矩阵

73. 矩阵置零

class Solution {
    public void setZeroes(int[][] matrix) {
        // 检查第一行和第一列是否有0
        int l_matrix = matrix.length; // 列
        int r_matrix = matrix[0].length; // 行

        boolean l_flag = false; // 列
        boolean r_flag = false; // 行

        // 检查第一列
        for (int i = 0; i < l_matrix; i++) {
            if (matrix[i][0] == 0) {
                l_flag = true;
                break;
            }
        }

        // 检查第一行
        for (int i = 0; i < r_matrix; i++) {
            if (matrix[0][i] == 0) {
                r_flag = true;
                break;
            }
        }

        //将第一列和第一行作为标志位
        for(int i=0; i

48. 旋转图像

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;

        //题解为官方题解做法,但改良了内层循环次数j
        //外层:i是指循环多少圈,刚好为n/2
        for(int i=0; i

54. 螺旋矩阵

思路:

【LeetCode 每日一题】54. 螺旋矩阵 | 手写图解版思路 + 代码讲解_哔哩哔哩_bilibili

class Solution {
    public List spiralOrder(int[][] matrix) {
        if(matrix.length==0) return new ArrayList();

        int up = 0, down = matrix.length-1;
        int left = 0, right = matrix[0].length-1;

        List ans = new ArrayList();

        while(true){

            for(int i=left; i<=right; i++)
                ans.add(matrix[up][i]);
            
            //上边界下移
            up++;

            for(int i=up; i<=down; i++)
                ans.add(matrix[i][right]);

            //右边界左移
            right--;

            //分成两次判断跳出条件
            if(left>right || up>down)
                break;

            for(int i=right; i>=left; i--)
                ans.add(matrix[down][i]);
            
            //下边界上移
            down--;

            for(int i=down; i>=up; i--)
                ans.add(matrix[i][left]);
            
            //左边界右移
            left++;

            //分成两次判断跳出条件
            if(left>right || up>down)
                break;
        }

        return ans;  
    }
}

240. 搜索二维矩阵 II

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {

        if(matrix.length==0 || matrix[0].length==0) return false;

        int right = matrix[0].length-1;
        int up = 0;

        while(true){
            //判断最右侧列是否排除
            if(matrix[up][right]>target)
                right--;
            //判定是否越界
            if(right<0) break;

            //判断最上侧行是否排除
            if(matrix[up][right]matrix.length-1) break;

            if(matrix[up][right]==target)
                return true;
        }

        //没找到目标,跳出后输出fasle
        return false;
    }
}

74. 搜索二维矩阵

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int right = matrix[0].length-1;
        int up = 0;

        while(true){
            if(matrix[up][right]=matrix.length) break;

            if(matrix[up][right]>target)
                right--;
            if(right<0) break;

            if(matrix[up][right]==target)
                return true;
        }
        return false;
    }
}

你可能感兴趣的:(算法,算法)