数组和字符串-二维数组

文章目录

        • 旋转矩阵
          • 题意:
          • 解:
          • 代码:
        • 零矩阵
          • 题意:
          • 解:
          • 代码:
        • 对角线遍历
          • 题意:
          • 解:
          • 代码:

旋转矩阵

题意:

将矩阵旋转90度

解:

翻转法,先水平翻转再对角线翻转

数学推导法,四个数字一组

代码:
#include
using namespace std;
void rotate(vector>& matrix)//推导
{
    int lg=matrix.size();
    for(int i=0;i>& matrix)//翻转法 
{
    int lg=matrix.size();
    for(int i=0;i> matrix;
    int n;cin>>n;
    for(int i=0;itemp;int t;
        for(int j=0;j>t;temp.push_back(t);
        }
        matrix.push_back(temp);
    }
    rotate(matrix);
    for(auto &row:matrix)
    {
        for(auto &col:row) cout<

零矩阵

题意:

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零

解:

第一遍标记,第二遍赋值,O(N*M)时间 O(n+m)空间

代码:
#include
using namespace std;
void setZeroes(vector>& matrix)
{
    int n=matrix.size();if(!n)return;
    int m=matrix[0].size();if(!m)return;
    vectorbook_row(n,true),book_col(m,true);
    for(int i=0;i> matrix;
    int n,m;cin>>n>>m;
    for(int i=0;itemp;int t;
        for(int j=0;j>t;temp.push_back(t);
        }
        matrix.push_back(temp);
    }
    setZeroes(matrix);
    for(auto &row:matrix)
    {
        for(auto &col:row) cout<

对角线遍历

题意:

根据对角线规则遍历矩阵

解:

好题,模拟太难写了

把它从左上角看,可以看成一个不完整的三角形,按行遍历三角形,记得翻转

代码:
#include
using namespace std;
vector findDiagonalOrder(vector>& mat)
{
    vectorret;
    //int zt=0,move[4][2]={ {-1,+1},{0,+1},{+1,-1},{+1,0} };//移动
    int n=mat.size(),m=mat[0].size();bool zt=1;
    vector>temp(n+m+3,vector());
    for(int i=0;i> matrix;
    int n,m;cin>>n>>m;
    for(int i=0;itemp;int t;
        for(int j=0;j>t;temp.push_back(t);
        }
        matrix.push_back(temp);
    }
    vectorans=findDiagonalOrder(matrix);
    for(auto a:ans) cout<

你可能感兴趣的:(力扣每日一题,c++,leetcode)