首页 > 其他分享 >LeetCodeHot100 73. 矩阵置零 54. 螺旋矩阵 48. 旋转图像 240. 搜索二维矩阵 II

LeetCodeHot100 73. 矩阵置零 54. 螺旋矩阵 48. 旋转图像 240. 搜索二维矩阵 II

时间:2024-03-14 19:00:44浏览次数:20  
标签:right matrix 48 bottom int LeetCodeHot100 矩阵 ++ left

73. 矩阵置零
https://leetcode.cn/problems/set-matrix-zeroes/description/?envType=study-plan-v2&envId=top-100-liked

public void setZeroes(int[][] matrix) {
        int top = 0,bottom = matrix.length,left = 0,right = matrix[0].length;
        int[][] flag = new int[bottom][right];
        for (int i = 0; i < bottom; i++) {
            for (int j = 0; j < right; j++) {
                if (matrix[i][j] == 0) flag[i][j] = 1;
            }
        }
        for (int i = 0; i < bottom; i++) {
            for (int j = 0; j < right; j++) {
                if (flag[i][j] == 1){
                    for (int k = 0; k < i; k++) {
                        matrix[k][j] = 0;
                    }
                    for (int k = i; k < bottom; k++) {
                        matrix[k][j] = 0;
                    }
                    for (int k = 0; k < j; k++) {
                        matrix[i][k] = 0;
                    }
                    for (int k = j; k < right; k++) {
                        matrix[i][k] = 0;
                    }
                }
            }
        }
    }

总结:new一个数组去记录哪个位置是0 ,再把0的位置去上下左右变成0
54. 螺旋矩阵
https://leetcode.cn/problems/spiral-matrix/description/?envType=study-plan-v2&envId=top-100-liked

public List<Integer> spiralOrder(int[][] matrix) {
        int top = 0 , bottom = matrix.length - 1 , left = 0 , right = matrix[0].length - 1;
        int num = 0 ;
        int tar = (bottom + 1) * (right + 1);
        List<Integer> list = new ArrayList<>();
        while (num < tar){
            for (int i = left; i <= right; i++) {
                list.add(matrix[top][i]);
                num++;
            }
            if (num == tar) break;;
            top++;
            for (int i = top; i <= bottom; i++) {
                list.add(matrix[i][right]);
                num++;
            }
            if (num == tar) break;;
            right--;
            for (int i = right; i >= left; i--) {
                list.add(matrix[bottom][i]);
                num++;
            }
            if (num == tar) break;;
            bottom--;
            for (int i = bottom; i >= top; i--) {
                list.add(matrix[i][left]);
                num++;
            }
            if (num == tar) break;;
            left++;
        }
        return list;
    }

总结:经典的矩阵问题,把top,left,bottom,right 这四个边界弄明白就没问题
48. 旋转图像
https://leetcode.cn/problems/rotate-image/description/?envType=study-plan-v2&envId=top-100-liked

public void rotate(int[][] matrix) {
        int top = 0,bottom = matrix.length - 1,left = 0,right = matrix[0].length - 1;
        //f用来标记选择的格子
        int n = matrix.length;
        for (int i = 0;i < n / 2;i++){
            for (int f = left; f < right; f++) {
                int iTop = matrix[top][f];
                int iRight = matrix[f][right];
                int iBottom = matrix[bottom][right - (f - left)];
                int iLeft = matrix[bottom - (f - left)][left];
                matrix[top][f] = iLeft;
                matrix[f][right] = iTop;
                matrix[bottom][right - (f - left)] = iRight;
                matrix[bottom - (f - left)][left] = iBottom;
            }
            top++;
            right--;
            bottom--;
            left++;
        }
    }

总结:一次转四个,yeap
240. 搜索二维矩阵 II
https://leetcode.cn/problems/search-a-2d-matrix-ii/?envType=study-plan-v2&envId=top-100-liked

public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length, n = matrix[0].length;
        int r = 0;
        int c = n - 1;
        while (r < m && c >= 0){
            if (matrix[r][c] == target) {
                return true;
            }else if (target > matrix[r][c]){
                r++;
            }else {
                c--;
            }
        }
        return false;
    }

总结:此题可以看成右上角为root的二叉排序树,很nice的思路,,无敌!

标签:right,matrix,48,bottom,int,LeetCodeHot100,矩阵,++,left
From: https://www.cnblogs.com/jeasonGo/p/18073713

相关文章

  • [SCOI 2009] 迷路 (矩阵快速幂)
    [SCOI2009]迷路传送门问题描述Windy在有向图中迷路了。该有向图有\({N}\)个节点,Windy从节点\({1}\)出发,他必须恰好在\({T}\)时刻到达节点\({N}\)。现在给出该有向图,你能告诉Windy总共有多少种不同的路径吗?注意:Windy不能在某个节点逗留,且通过某有向边的时间严格......
  • IIC SPI UART RS232 RS485的差异简介
    UART串口通信:异步通信,两根线(RXDTXD)交叉连接进行点对点的通信,通信双方要设置好相同的波特率(其实不用完全一样也可以只要相差不大,毕竟是通信双方不是同一时钟),发送数据一般是发送8位,有起始位、数据、检验、停止位。串口通信的抗干扰能力差,通信距离短。RS232协议:编程还是按串......
  • 成都电路板研发:细节也容易搞si人,一个触摸屏485通信数据延迟的“治疗”
    本文介绍一个触摸屏在485通信时遇到数据延时的一个解决方法。前段时间做单片机系统、电路板、控制器、仪器、物联网、工控、电子产品、软件开发项目(Q:2531二六3726)时“接诊”了一个“病人”:是一台装置,它的主控板实现了控制3台泵,采集传感器信息,主控板的一个串口用TTL电平与自带的一......
  • 矩阵快速幂
    矩阵快速幂例题6.方程【算法赛】-蓝桥云课P1962斐波那契数列-洛谷P2455SDOI2006-洛谷P7112【模板】行列式求值-洛谷P1939矩阵加速(数列)-洛谷我们线代课已经讲到矩阵了,自己也终于把之前卡了好久的矩阵快速幂的题过了ヾ(≧▽≦*)o补充知识矩阵与矩阵乘......
  • 罐头鱼AI视频矩阵系统介绍|视频矩阵获客
    智能化管理,轻松批量剪辑短视频!AI系统助力您的视频营销提效!    随着短视频营销的兴起,我们推出了一款AI批量剪辑短视频系统,让视频制作更加智能高效。以下是系统的主要功能特点:首页显示:清晰展示账号登录状态、可绑定账号数量、已绑定账号情况和最近上传的视频素材,让您......
  • GB4806.8食品包装纸袋、纸杯、纸饭盒 广东检测机构 重点实验室
    什么是食品接触用纸?食品接触用纸和纸板材料及制品指的是在正常使用条件下,各种已经或预期可能与食品或食品添加剂(以下简称食品)接触,或其成分可能转移到食品中的纸和纸板材料及制品,包括涂蜡纸、硅油纸和纸浆模塑制品等。2022年7月28日,卫生健康委、市场监管总局联合发布36项食品......
  • CVE-2023-48906
    github:https://github.com/bluekitchen/btstack/issues/546Inthebtstacksourcecode,wecanfindaninterestingpieceofcode.charchar_for_nibble(intnibble){staticconstchar*char_to_nibble="0123456789ABCDEF";if(nibble<1......
  • Qt warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为
    Qtwarning:C4819:该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode格式以防止数据丢失Qt导入其他电脑上开发的项目后,出现这种警告:Qtwarning:C4819:该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode格式以防止数据丢失......
  • 矩阵模板("+" "-" "*")
    structmat{ intn,m; inta[maxn][maxn]; voidzero() { memset(a,0,sizeof(a)); } voidone() { zero(); for(inti=1;i<=n;i++) { a[i][i]=i; } } voidresize(intx,inty) { n=x; m=y; } matoperator+(constmat&A)const { mat......
  • 力扣148排序链表--复习归并和快速排序
    递归的归并排序归并排序主要流程是拆分--排序--合并--排序--合并//拆分voidmergeSort(vector<int>&nums,intstart,intend){ if(start>=end)return; intmid=start+(end-start)/2; mergeSort(nums,start,mid); mergeSort(nums,mid+1,end); //最后一层排......