精华内容
下载资源
问答
  • 二维数组旋转90度

    千次阅读 2016-06-13 23:01:22
    二维数组旋转90度,旋转前的位置和旋转后位置的关系是: a[i][j]=a[j][n-1-j]n是数组的列数。 leetcode第48题, Rotate Image就是要我们旋转数组。这有两种思路: 1 按照换算公式,对每个位置进行变换 2 由于...

    二维数组旋转90度,旋转前的位置和旋转后位置的关系是:

    a[i][j]=a[j][n-1-j]n是数组的列数。

    leetcode第48题, Rotate Image就是要我们旋转数组。这有两种思路:

    1 按照换算公式,对每个位置进行变换

    2 由于旋转90度可以看到变换前和变换后是按照对角线对称以后再反转的

    所以有两种解法:

    代码:

    class Solution {
    public:
        void rotate(vector<vector<int>>& matrix) {
            //solution1
            /*if(matrix.empty())
                return;
            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;
                }
            }*/
            //solution2
            if(matrix.empty())
                return ;
            for(int i=0;i<matrix.size();i++){
                for(int j=i+1;j<matrix[0].size();j++)
                    swap(matrix[i][j],matrix[j][i]);
                reverse(matrix[i].begin(),matrix[i].end());
            }
        }
    };


    展开全文
  • 二维数组旋转90度、180、270

    万次阅读 2017-08-09 18:53:53
    图像处理中,很多时候要使用到二维数组旋转。本质上二维数组旋转其实就是坐标的变换,即旋转后的坐标(x,y)需要对应到原有二维数组的坐标点上,取到正确的值即可完成正确的旋转

          图像处理中,很多时候要使用到二维数组的旋转。本质上二维数组的旋转其实就是坐标的变换,即旋转后的坐标(x,y)需要对应到原有二维数组的坐标点上,取到正确的值即可完成正确的旋转。

          规则很好找。见如下的代码中的3个转换公式即可。

          

    void Rotate90()
    {
    	int b[2][3] = {{1,2,3},{4,5,6}};
    	int a[3][2] = {0};
    
    	for(int i=0;i<3;i++)
    	{
    		for(int j=0;j<2;j++)
    		{
    			//a[i][j] = b[h-1-j][i]; here h = 2
    			a[i][j] = b[2-1-j][i];
    		}
    	}
    
    	//使用一维数组模拟二维数组
    	int w = 3;
    	int h = 2;
    	int *p = (int *)new int[w*h];
    	int *p2 = (int *)new int[w*h];
    	for(int i=0;i<w*h;i++)
    	{
    		p[i] = i+1;
    	}
    	int newH = w;
    	int newW = h;
    	for(int i=0;i<newH;i++)
    	{
    		for(int j=0;j<newW;j++)
    		{
    			//a[i][j] = b[h-1-j][i]
    			p2[i*newW+j] = p[(h-1-j)*w+i];
    		}
    	}
    
    	delete []p;
    	delete []p2;
    }
    
    void Rotate180()
    {
    	int b[2][3] = {{1,2,3},{4,5,6}};
    	int a[2][3] = {0};
    
    	for(int i=0;i<2;i++)
    	{
    		for(int j=0;j<3;j++)
    		{
    			//a[i][j] = b[h-1-i][w-1-j]; here h = 2
    			a[i][j] = b[2-1-i][3-1-j];
    		}
    	}
    
    	//使用一维数组模拟二维数组
    	int w = 3;
    	int h = 2;
    	int *p = (int *)new int[w*h];
    	int *p2 = (int *)new int[w*h];
    	for(int i=0;i<w*h;i++)
    	{
    		p[i] = i+1;
    	}
    	int newH = h;
    	int newW = w;
    	for(int i=0;i<newH;i++)
    	{
    		for(int j=0;j<newW;j++)
    		{
    			//a[i][j] = b[h-1-i][w-1-j];
    			p2[i*newW+j] = p[(h-1-i)*w+w-1-j];
    		}
    	}
    
    	delete []p;
    	delete []p2;
    }
    
    void Rotate270()
    {
    	int b[2][3] = {{1,2,3},{4,5,6}};
    	int a[3][2] = {0};
    
    	for(int i=0;i<3;i++)
    	{
    		for(int j=0;j<2;j++)
    		{
    			//a[i][j] = b[j][w-1-i]; here w = 3
    			a[i][j] = b[j][3-1-i];
    		}
    	}
    
    	//使用一维数组模拟二维数组
    	int w = 3;
    	int h = 2;
    	int *p = (int *)new int[w*h];
    	int *p2 = (int *)new int[w*h];
    	for(int i=0;i<w*h;i++)
    	{
    		p[i] = i+1;
    	}
    	int newH = w;
    	int newW = h;
    	for(int i=0;i<newH;i++)
    	{
    		for(int j=0;j<newW;j++)
    		{
    			//a[i][j] = b[j][w-1-i];
    			p2[i*newW+j] = p[j*w+w-1-i];
    		}
    	}
    
    	delete []p;
    	delete []p2;
    }

    展开全文
  • day4 二维数组旋转90度

    2017-05-20 17:59:00
    二维数组旋转其实就是数组里面的元素对调的情况;下面有一个4×4的二维数组,[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],现在要求把二维数组转化为下列形式,[[0, 0, 0, 0], [1, 1, 1, 1], [2, 2...

        二维数组的旋转其实就是数组里面的元素对调的情况;下面有一个4×4的二维数组,[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],现在要求把二维数组转化为下列形式,[[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]]。下面来看一下流程图:

    流程图:

     

        流程图如上面所示,就是进行简单的互换而已,下面我们来用代码实现行列互换:

    data = [[i for i in range(4)] for j in range(4)]
    print(data)
    #定义行的初始值,我们发现,行的变化是从0开始,递增到3
    col = 0
    while col < 4:
        #循环的结束条件,由于只有四行,因此循环4即结束
        for row in range(col,4):
            #这里我们让行列的序号每次循环递增1,避免之前转换的再次转换
            tem = data[row][col]
            #存储临时变量,免得替换之后值发生改变
            data[row][col] = data[col][row]
            #列表行列的值进行互换
            data[col][row] = tem
        col += 1
        #列的索引每次加一
    
    print(data)

        上面代码的主题思想就是流程图中的思想,只需要进行必要的转换即可,注意转换的过程中所以值的变化。所以流程图还是很重要的。

        运行代码如下:

        [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
      [[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]]

    转载于:https://www.cnblogs.com/gengcx/p/6882760.html

    展开全文
  • 面试题:将二维数组旋转90度

    千次阅读 2019-05-18 20:13:25
    1 编程题:请将下面的二维数组进行旋转90度; {11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 41 42 43 44 45} 首先,旋转90度后,x,y的变换规律, (0,0)-->(0,3) (0,1)-->(1,3) (0,2)-->(2,3) (0,3...

    1 编程题:请将下面的二维数组进行旋转90度;

    {11 12 13 14 15

     21 22 23 24 25

     31 32 33 34 35

     41 42 43 44 45}

    首先,旋转90度后,x,y的变换规律,

    (0,0)-->(0,3)  (0,1)-->(1,3) (0,2)-->(2,3) (0,3)-->(3,3) (0,4)-->(4,3)

    ...

    (3,0)-->(0,0) (3,1)-->(1,0) (3,2)-->(2,0) (3,3)-->(3,0) (3,4)-->(4,0)

    由以上规律,得

    #include <iostream>
    using namespace std;
    
    //二维数组做函数形参
    int rotate90(int (*a)[5], int (*b)[4], int bw, int bh)
    {
    	for (int i=0;i<bh;i++)//5
    	{
    		for (int j=0;j<bw;j++)//4
    		{
    			b[i][j] = a[bw-1-j][i];
    		}
    	}
    
    	return 0;
    }
    
    int main()
    {
    	//将二维数组旋转90度
    	int a[4][5] = { 11, 12, 13, 14, 15,
    		21, 22, 23, 24, 25,
    		31, 32, 33, 34, 35,
    		41, 42, 43, 44, 45
    	};
    
    	int b[5][4] = { 0 };
    	
    	rotate90(a,b,4,5);
    	for (int i=0;i<5;i++)
    	{
    		cout << b[i][0] << ", " << b[i][1] << ", " << b[i][2] << ", " << b[i][3] << endl;
    	}
    	system("pause");
    	return 0;
    }

     

    参考文章:

    1. https://blog.csdn.net/faithzzf/article/details/77009777

    2. https://www.cnblogs.com/alantu2018/p/8465894.html

     

     

     

     

    展开全文
  • 关于二维数组旋转90度的算法

    千次阅读 2018-08-29 15:31:36
    import java.util.Scanner; public class E { public static void main(String args[]){ Scanner scanner=new Scanner(System.in); System.out.println(&...输入一个3*3的二维数组:&quot;); int a[][]=n...
  • 二维数组旋转90度

    2017-10-30 10:42:35
     按顺时针旋转步 1 先按副对角线交换 2 然后水平中线对称交换 代码: void rotate(vector > &matrix) { int rows=matrix.size(); if(rows==0) return; for(int i=0;i;i++){ //副对角线交换
  • python 实现二维数组旋转90度

    千次阅读 2018-05-28 19:19:53
    # coding:utf8 __author__ = 'bluesli' ...旋转90度后是这样的: [0, 0, 0, 0] [1, 1, 1, 1] [2, 2, 2, 2] [3, 3, 3, 3] 实际上就是沿着对角线交换数字:但是已经交换过了的就不能再交换,所以必须让内层循环从i...
  • data = [[col for col in range(4)] for row in range(5)] for row in data: print(row) print('--------') print(len(data)) for r_index, row in enumerate(data): ... for c_index in range(...
  • 题目: 把一个长宽都为n的二维数组旋转90度 看到过有种讨巧的办法,复杂度低,但是感觉不知道是基于什么思路想出来的,所以我还是在这里记录下我自己的方法,也是很普通的那种。 所以,长度为N, 当前点坐标为(x, ...
  • 给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90
  • Rotate Image   You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Follow up: Could you do this in-place? class Solution { public: void
  • 二维数组旋转.zip

    2019-07-02 19:42:19
    给定一个二维数组,用C++实现将二维数组旋转90度
  • def f(n, m): data = [[col for col in range(n)] for row in range(m)] for row in data: print(row) print('--------') ... new_data = [[a for a in range(m)] for b in range(n)...
  • 二维数组旋转90度输出

    千次阅读 2009-02-28 12:46:00
    #include using namespace std;int main(){ int b[8][8] = {{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}}; int m = 4; for(int i =0;i;i++) { for(int j=0;j;j++) { cout[i][j]
  • 二维数组旋转

    2021-01-18 10:00:17
    周作业1: 写程序,将一个正方形二维数组旋转90度 //不是说按规律打印,是真的要把数组给旋转 //要求: 尽量不要用新的数组 (尽量减少内存开销) 这个题我可想了好久,第一想法是直接用另一个二维数组把旋转后的数放在新...
  • 二维数组旋转的方法

    2021-04-08 14:37:58
    目标:有一个N*N的二维数组,需要将将这个二维数组旋转90度。效果如下图 思路一: 生成一个新的二维数组,然后逐个元素填写数据。最后再覆盖掉原数组。 根据上图,很容易得出坐标关系: 通过逐位遍历,即可...
  • In a program I'm writing the need to rotate a two-dimensional array came up. Searching for the optimal solution I found this impressive one-liner that does the job:rotated = zip(*original[::-1])I'm us...
  • 今天小编就为大家分享一篇python 二维数组90度旋转的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,317
精华内容 11,326
关键字:

二维数组旋转90度