将矩阵旋转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<