力扣LeetBook数组和字符串--二维数组

1.旋转矩阵

题目链接

想了那么久的各种旋转,对角线,其实把问题搞复杂了。

  • 旋转90度的本质无非就是转置 +镜像对称
    转置是什么?:将矩阵的行和列互换。
    镜像对称:把矩阵从中间对折,互换位置

矩阵 A

A = [ 1 3 0 2 4 6 ] A = \begin{bmatrix} 1 & 3 & 0 \\ 2 & 4 & 6 \\ \end{bmatrix} A=[123406]

转置后 Aᵀ

A ⊤ = [ 1 2 3 4 0 6 ] A^\top = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 0 & 6 \\ \end{bmatrix} A⊤= 130246

cpp 复制代码
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n=matrix.size();//矩阵的长
        for(int i=0;i<n;i++)
        for(int j=i;j<n;j++)
        swap(matrix[i][j],matrix[j][i]);//转置
        
        for(int i=0;i<n;i++)
        for(int j=0;j<n/2;j++)
        swap(matrix[i][j],matrix[i][n-j-1]);//镜像对称
    }
};

Python

python 复制代码
class Solution(object):
    def rotate(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: None Do not return anything, modify matrix in-place instead.
        """
        n=len(matrix)
        for i in range(n):#0,n-1
            for j in range(i,n):#i,n-1
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]  # 直接交换
        for i in range(n):
            for j in range(n//2):
                matrix[i][j], matrix[i][n - j - 1] = matrix[i][n - j - 1], matrix[i][j]

2.零矩阵

题目链接

思路:遍历找出0元素所在行和列的位置,把位置标记出来。

第二次遍历数组,行或列有一个被标记,就把该位置置为0
注意:int flag_row[row]={};错误

row 和 col 虽然是变量,但它们的值是在运行时确定的(比如从 matrix.size() 和 matrix[0].size() 获取),而不是在编译时确定的常量。

在标准 C++ 中,数组的大小必须是编译时常量(比如 constexpr 或 #define 定义的常量)

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        
        int row=matrix.size();//行
        int col=matrix[0].size();//列
        // int flag_row[row]={};
        // int flag_col[col]={};

        std::vector<int> flag_row(row, 0);  // 初始化为全 0
        std::vector<int> flag_col(col, 0);  // 初始化为全 0
        for(int i=0;i<row;i++)
        {
          for(int j=0;j<col;j++)
          {
              if(matrix[i][j]==0)
              {
                  flag_row[i]=1;
                  flag_col[j]=1;
              }
          }
        }
        //置为0
        for(int i=0;i<row;i++)
        {
          for(int j=0;j<col;j++)
          {
              if(flag_row[i]||flag_col[j])matrix[i][j]=0;
          }
        }

    }
};

Python版本

python 复制代码
class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        row=len(matrix)
        col=len(matrix[0])
        flag_row=[0]*row
        flag_col=[0]*col

        for i in range(row):
            for j in range(col):
                if matrix[i][j]==0:
                    flag_row[i]=1
                    flag_col[j]=1
        
        for i in range(row):
            for j in range(col):
                if flag_row[i]  or flag_col[j]:
                    matrix[i][j]=0
相关推荐
一直都在57223 分钟前
数据结构入门:二叉排序树的构建与相关算法
数据结构·算法
_Minato_33 分钟前
数据结构知识整理——复杂度的计算
数据结构·经验分享·笔记·算法·软考
listhi52035 分钟前
针对燃油运输和车辆调度问题的蚁群算法MATLAB实现
前端·算法·matlab
月明长歌1 小时前
【码道初阶】【LeetCode 102】二叉树层序遍历:如何利用队列实现“一层一层切蛋糕”?
java·数据结构·算法·leetcode·职场和发展·队列
星诺算法备案1 小时前
读懂大模型备案流程,开启技术安全应用新征程
人工智能·算法·推荐算法·备案
Loo国昌1 小时前
大型语言模型推理范式演进:从提示工程到思维算法
人工智能·算法·语言模型·自然语言处理
代码游侠1 小时前
学习笔记——线程控制 - 互斥与同步
linux·运维·笔记·学习·算法
yaoh.wang1 小时前
力扣(LeetCode) 66: 加一 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
wanderist.2 小时前
2025年蓝桥杯省赛C++大学A组
c++·算法·蓝桥杯
啊董dong2 小时前
noi-2025年12月16号作业
数据结构·c++·算法·noi