算法学习12-将数组旋转90度&&之字打印数组

将数组旋转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;
} 


发布了27 篇原创文章 · 获赞 1 · 访问量 1038

猜你喜欢

转载自blog.csdn.net/qq_45205390/article/details/104100845
今日推荐