将数组旋转90度&& 之字打印数组
将数组旋转90度
问题描述:
图解算法
#include<iostream>
#include<vector>
using namespace std;
class RotationPrintArray{
public:
void printEdgeprintEdge(vector< vector<int> >m, int tR, int tC, int dR, int dC);
void spiralOrderPrint(vector< vector<int> >matrix);
void Rotate(vector<vector<int> >& matrix);
};
void RotationPrintArray::Rotate(vector<vector<int> >& matrix){
if(matrix.empty()){
return;
}else{
int tmp;
int m=matrix.size();
int n=matrix[0].size();
for(int i=0;i<m/2;i++){
for(int j=i+1;j<n-i;j++){
tmp=matrix[i][j];
matrix[i][j]=matrix[n-1-j][i];
matrix[n-1-j][i]=matrix[n-1-i][n-1-j];
matrix[n-1-i][n-1-j]=matrix[j][n-1-i];
matrix[j][n-1-i]=tmp;
}
}
}
}
void RotationPrintArray::spiralOrderPrint(vector< vector<int> >matrix) {
int tR = 0;
int tC = 0;
int dR = matrix.size()- 1;
int dC = matrix[0].size() - 1;
while (tR <= dR && tC <= dC) {
printEdgeprintEdge(matrix, tR++, tC++, dR--, dC--);
}
}
void RotationPrintArray::printEdgeprintEdge(vector< vector<int> >m, int tR, int tC, int dR, int dC) {
int times=dC-tC;
int tmp=0;
for(int i=0;i!=times;i++){
tmp=m[tR][tC+i];
m[tR][tC+i]=m[dR-i][tC];
m[dR-i][tC]=m[dR][dC-i];
m[dR][dC-i]=m[tR+i][dC];
m[tR+i][dC]=tmp;
}
}
之字打印数组
问题描述:
对于一个矩阵,请设计一个算法,将元素按“之”字形打印。具体见样例。
给定一个整数矩阵mat,以及他的维数nxm,请返回一个数组,其中元素依次为打印的数字。
测试样例:
[[1,2,3],[4,5,6],[7,8,9],
返回:
1,2,4,3,5,7,6,8,9
图解算法:
图解算法
代码实现:<ChildPrint.h>
#include<iostream>
#include<vector>
using namespace std;
class Print{
public:
vector<int> printMatrix(vector<vector<int> > Array, int n, int m);
void PrintLeven(vector<vector<int> > Array, int tr,int tc,int dr,int dc,bool f);
void PrintZhi(vector<vector<int> > Array);
private:
vector< vector<int> >Array;
};
vector<int> Print::printMatrix(vector<vector<int> > Array, int n, int m) {
vector<int>ans;
int dir = 1;
for(int i=0;i<n;i++){
if(dir>0)
{
for(int j=0;j<m;j++)ans.push_back(Array[i][j]);
}else{
for(int j=m-1;j>=0;j--)ans.push_back(Array[i][j]);
}
dir = -1 * dir;
}
return ans;
}
void Print:: PrintLeven(vector<vector<int> > Array, int tr,int tc,int dr,int dc,bool f){
if(f){
while(tr!=dr+1){
cout<<Array[tr++][tc--]<<" ";
}
}else{
while(dr!=tr-1){
cout<<Array[dr--][dc++]<<" ";
}
}
}
void Print:: PrintZhi(vector<vector<int> > Array){
int Aa,Ab,Ba,Bb;
int ENDR=Array.size()-1;
int ENDC=Array[0].size()-1;
bool FormUp=false;
while(Aa!=ENDR+1){
PrintLeven(Array,Aa,Ab,Ba,Bb,FormUp);
Aa=Ab==ENDC?Aa+1:Aa;
Ab=Ab==ENDC?Ab:Ab+1;
Bb=Bb==ENDR?Bb+1:Bb;
Ba=Ba==ENDR?Ba:Ba+1;
FormUp=!FormUp;
}
cout<<endl;
}