• 1.6数组-像素翻转


    题目描述

    有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。

    给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。

    测试样例:
    [[1,2,3],[4,5,6],[7,8,9]],3
    返回:[[7,4,1],[8,5,2],[9,6,3]]


    解法:我的想法是先将行列进行互换,再将两列进行互换,最后得到旋转后的矩阵。
    1.vector作为二维数组的新用法
    2.用swamp函数进行互换也可
    #include <iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    void printMat(vector<vector<int> > mat, int n) {
    	for(int i=0; i < n; i++) {  
    	    for(int j = 0; j < n; j++) 
                cout << mat[i][j] << "   "; 
                cout << endl; 
        } 
    }
    vector<vector<int> > transformImage(vector<vector<int> > mat, int n) {
            //90度翻转,先对角互换,再0与n-1之间的列互换即可
            //先对角互换 
    		for(int i = 0; i < n; i++) {
    			for(int j = i + 1; j < n; j++) {  //这里i和j相等的时候就不用互换了
    			int temp;
    			temp = mat[i][j] ;
    			mat[i][j] = mat[j][i];
    			mat[j][i] = temp;
    			}
    		}
    		//列向量互换
    		for(int j = 0; j < n /2; j++ )
    		for(int i = 0; i < n; i++) {
    			int temp = mat[i][j];
    			mat[i][j] = mat[i][n-j-1];
    			mat[i][n-j-1] = temp;
    		} 		
        printMat(mat, n);
        return mat;
    }
    int main(int argc, char** argv) {
    	int n = 5;
    vector<vector<int> > array(n); //3个向量 
        for(int i = 0; i < n; i++) {
    		array[i].resize(n);//设置数组的大小3X3
    		}               
     for(int i = 0; i < n; i++) {
     	for(int j = 0; j < n; j++) {
    	 	array[i][j] = (n * i + 1 + j);	 	
    	   }
    	}
    	  //输出 
    	cout << "原始图像:" << endl;
    	printMat(array, n);  
        cout << "90度旋转后的数组:" << endl;
    	transformImage(array, n);
        return 0;  
    }
    

      

  • 相关阅读:
    python 八进制数
    python hmac加盐
    python contextlib
    python hashlib
    python struct
    python namedtuple
    python datetime timezone 时区转化
    Android核心基础(手机卫士的一个知识点总结)
    TabHost结合RadioButton实现主页的导航效果
    Android SDK更新失败最新解决方案
  • 原文地址:https://www.cnblogs.com/xiaohaigege/p/5177775.html
Copyright © 2020-2023  润新知