精华内容
下载资源
问答
  • /** * Created by lxw, liwei4939@126.com on 2017/11/2. * 将一方阵顺时针旋转90度 * 使用分圈处理方式 */ public class rotateMatrix { public void rotate(int[][] matrix){ int tR = 0; int tC = 0;
    /**
     * Created by lxw, liwei4939@126.com on 2017/11/2.
     * 将一方阵顺时针旋转90度
     * 使用分圈处理方式
     */
    public class rotateMatrix {
    
        public void rotate(int[][] matrix){
            int tR = 0;
            int tC = 0;
            int dR = matrix.length - 1;
            int dC = matrix[0].length - 1;
            while (tR < dR){
                rotateEdge(matrix, tR++, tC++, dR--, dC--);
            }
        }
    
        public void rotateEdge(int[][] matrix, int tR, int tC, int dR, int dC){
            int times = dC - tC;
            int tmp = 0;
            for (int i =0; i< times; i++){
                tmp = matrix[tR][tC + i];
                matrix[tR][tC + i] = matrix[dR -i][tC];
                matrix[dR -i][tC] = matrix[dR][dC -i];
                matrix[dR][dC -i] = matrix[tR + i][dC];
                matrix[tR + i][dC] = tmp;
            }
        }
    
        public static void main(String[] args){
            rotateMatrix tmp = new rotateMatrix();
            int[][] matrix = {{1, 2, 3, 4},{5, 6, 7, 8}, {9, 10, 11, 12},
                    {13, 14, 15, 16}};
            tmp.rotate(matrix);
            for (int[] arr: matrix){
                for (int i=0; i< arr.length; i++){
                    System.out.print(arr[i]+ " ");
                }
                System.out.println();
            }
        }
    
    }
    

    展开全文
  • Java 数组转置 方阵顺时针旋转90度

    万次阅读 2014-10-24 08:55:42
    方阵顺时针旋转90 方法一:可以看出,将二维数组顺时针旋转 90 ,就是将其转置后的数组的列进行前后交换(即第一列变为最后一列,第二列变为倒数第二列) 方法二:通过观察,可以看出: ...

    一维数组转置(首尾交换)

    public class array {
    	public static void main(String args[]){
    		int data [] =new int [] {1,2,3,4,5,6};
    		exchange(data);
    		print1(data);
    	}
    	//首尾交换
    	public static void exchange(int temp[]){
    		int head=0;
    		int tail=temp.length-1;
    		for(int i=0;i<temp.length/2;i++){
    			int k=temp[head];
    			temp[head]=temp[tail];
    			temp[tail]=k;
    			head++;
    			tail--;
    		}
    	}
    	//输出
    	public static void print1(int temp[]){
    		for(int s=0;s<temp.length;s++){
    			System.out.println(temp[s]);
    		}
    	}
    
    }
    

    二维数组转置


    public class helloword {
    	public static void main(String args[]){
    		int data [][] = new int [][] {{1,2,3},{4,5,6},{7,8,9}};
    		reverse(data);
    		print1(data);
    	}
    	//将矩阵转置
    	public static void reverse(int temp [][] ){
    		for(int i=0;i<temp.length;i++){
    			for(int j=i;j<temp[i].length;j++){
    				int k=temp[i][j];
    				temp[i][j]=temp[j][i];
    				temp[j][i]=k;
                  }
    		}
    	}
    	//将矩阵输出
    	public static void print1(int temp[][]){
    		for(int i=0;i<temp.length;i++){
    			for(int j=0;j<temp[i].length;j++){
    				System.out.print(temp[i][j]+"\t");
    			}
    			System.out.println();
    		}
    	}
    	
    }
    

     

    方阵顺时针旋转90


    方法一:可以看出,将二维数组顺时针旋转90度,就是将其转置后的数组的列进行前后交换(即第一列变为最后一列,第二列变为倒数第二列)

    方法二:通过观察,可以看出:

    1.  列号变为行号
    2. n-行号)变为列号(其中n为方阵维数减1



     

    若要将矩阵顺时针旋转180,两次调用旋转90度的函数就可以。

    方法一、方法二不仅针对三维方阵,其他维数的方阵也适合。

     

     

     

    方法一:


    public class helloword {
    	public static void main(String args[]){
    		int data [][] = new int [][] {{1,2,3},{4,5,6},{7,8,9}};
    		reverse(data);
    		exchange(data);
    		print1(data);
    	}
    	//将矩阵转置
    	public static void reverse(int temp [][] ){   
    		for(int i=0;i<temp.length;i++){
    			for(int j=i;j<temp[i].length;j++){
    				int k=temp[i][j];
    				temp[i][j]=temp[j][i];
    				temp[j][i]=k;
                }
    		}
    	}
    	//将转置后的矩阵的列交换(第一列跟最后一列交换,第二列跟倒数第二列交换)
    	public static void exchange(int temp[][]){
    		int a=0;
    		int b=temp.length-1;
    		for(int i=0;i < (temp.length)/2;i++){
    			for(int j=0;j<temp.length;j++){
    				int k=temp[j][a];
    				temp[j][a]=temp[j][b];
    				temp[j][b]=k;
    			}
    			a++;
    			b--;
    		}
    	}
    	//将矩阵输出
    	public static void print1(int temp[][]){
    		for(int i=0;i<temp.length;i++){
    			for(int j=0;j<temp[i].length;j++){
    				System.out.print(temp[i][j]+"\t");
    			}
    			System.out.println();
    		}
    	}
    	
    }

    方法二:


    public class arrayEx {
    	public static void main(String args[]){
    		int data [][] =new int [][] {{1,2,3},{4,5,6},{7,8,9}};
    		rotate(data);
    		print1(data);
    	}
    	//旋转90度
    	public static void rotate(int temp[][]){
    		int len=temp.length;
    		int b [][]=new int [len][len];
    		for(int i=0;i<len;i++){
    			for(int j=0;j<len;j++){
    				b[j][len-1-i]=temp[i][j];
    			}
    		}
    		for(int i=0;i<len;i++)
    			for(int j=0;j<len;j++)
    				temp[i][j]=b[i][j];
    	}
    	//输出
    	public static void print1(int temp[][]){
    		for(int i=0;i<temp.length;i++){
    			for(int j=0;j<temp[i].length;j++){
    				System.out.print(temp[i][j]+"\t");
    			}
    			System.out.println();
    		}
    	}
    
    }


    展开全文
  • 记录一下思路: ...有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N...

    记录一下思路:

    来源:http://www.nowcoder.com/questionTerminal/17ab1e527c504df09a600e1af09d9a60

    有一副由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]]

    思路:第一步:先将矩阵以次对角线互换 (如果是逆时针则为主对角线)
            第二步:交换第i行到第n-1-i行

     

    展开全文
  • 目录 一、问题描述 二、问题求解 (1)方阵顺时针旋转(以3阶方阵为例) 问题分析: 程序设计: ...(2)方阵转置(以3阶方阵为例) ...按顺时针旋转90度后方阵为: 7 4 1 8 5 2 9 8 3 转置后的方阵为: 1 4...

    目录

    一、问题描述

    二、问题求解

    (1)方阵顺时针旋转(以3阶方阵为例)

    问题分析:

    程序设计:

    (2)方阵转置(以3阶方阵为例)

    问题分析:

    程序设计:


     

    一、问题描述

    问题:

    1.将一个n阶方阵按顺时针方向旋转90度。

    2.将一个n阶方阵进行转置。

    实例:

    1    2    3

    4    5    6

    7    8    9

    按顺时针旋转90度后方阵为:

    7   4    1

    8    5    2

    9    8    3

    转置后的方阵为:

    1    4   7

    2    5   8

    3   6   9

    输入:

    3

    1    2    3

    4    5    6

    7    8    9

    输出:

    7   4    1

    8    5    2

    9    8    3

    1    4   7

    2    5   8

    3   6   9


    二、问题求解

    (1)方阵顺时针旋转(以3阶方阵为例)

    问题分析:

    对于矩阵等二维方向上的数字变化问题的求解,最主要的是找到其中的位置变化规律。

    ①方阵的位置表示如下:

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

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

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

    ②方阵旋转90度后的位置变化

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

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

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

    根据上述的位置变化可知:方阵旋转90度后,每一行的列号不变,并向下逐次递加1;每一行的行号从左往右依次递减。由于在同一个方阵上修改,是逐行从左往右依次修改,所以前面修改的值必然会对后面的值产生影响,所以,需要借助一个辅助矩阵。

    程序设计:

    #include <stdio.h>
    
    int main() {
    	int n;
    	int a[10][10];
    	int b[10][10];
    	//输入阶数
    	scanf("%d", &n);
    	//输入方阵的值
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < n; j++) {
    			scanf("%d", &a[i][j]);
    		}
    	}
    	
    	//方阵顺时针变化
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < n; j++) {
    			b[i][j] = a[n - j - 1][i];		
    		}
    	}
    
    	//方阵打印
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < n; j++) {
    			//printf("%-3d", b[i][j]);
    			printf("%-3d", a[i][j]);
    		}
    		printf("\n");
    	}
    	
    }

    运行调试结果:

     


    (2)方阵转置(以3阶方阵为例)

    问题分析:

    ①方阵的位置表示如下:

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

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

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

    ②方阵转置的位置变化

    [0,0]     [1,0]       [0,0]

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

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

    根据上述的位置变化可知:方阵转置后,主对角线(从左上角到右下角)上的数字位置没有变化,其他位置数字的位置变化是行列号对调。

    程序设计:

    #include <stdio.h>
    
    int main() {
    	int n;
    	int a[10][10];
    	int b[10][10];
    	//输入阶数
    	scanf("%d", &n);
    	//输入方阵的值
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < n; j++) {
    			scanf("%d", &a[i][j]);
    		}
    	}
    
    	//方阵转置
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < n; j++) {
    			b[i][j] = a[j][i];
    		}
    	}
    
    	//方阵打印
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < n; j++) {
    			printf("%-3d", b[i][j]);
    		}
    		printf("\n");
    	}
    
    }

    运行调试结果:

     

    展开全文
  • 矩阵顺时针旋转90度

    万次阅读 2013-04-19 16:12:42
    ----------------------------------------------------------------------------------------------- 有这样一道题目: 10.已知有n×n的方阵A,...(3)顺时针旋转90度。 这里解决的是第3小问。 --------
  • 【定义】 二维数组也称为矩阵(Matrix),关于矩阵的算法经常在各种考试及面试中出现,它主要考查被测试者的逻辑思维能力、...【问题】将矩阵顺时针旋转90度 如图 【分析】 这题是北京航天大学考研试题。对于...
  • 1 2 3 4 这个旋转一层 1 2 3 4 5 6 7 8 9 也是一层,因为5不用旋转 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 旋转两层 所以需要旋转的...
  • 简介将图像原地顺时针旋转90度,不开辟新空间。此题看似平易(题目简短),仔细研究发现着实不容易。经过一番探索后,终于找到了正确的算法,但是当使用opencv实现时,有碰到了困难而且费了一番周折才找到问题所在。...
  • 前一阵朋友碰到这么一道题:将图像原地顺时针旋转90度,不开辟新空间。此题看似平易(题目简短),仔细研究发现着实不容易。经过一番探索后,终于找到了正确的算法,但是当使用opencv实现时,有碰到了困难而且费了...
  • 有意思的方阵变换

    2020-07-05 20:11:23
    由0和1组成的nn方阵,如果按照行来看,每一行就是一个n位的二进制数,这个方阵可以经过旋转变换和镜像变换变成新的方阵,我们假定旋转变换有三种,分别是:方阵顺时针旋转90度、180度和270度;镜像变换有两种,分别...
  • 数据结构与算法—矩阵一、打印矩阵二、转圈打印矩阵三、方阵顺时针旋转90度四、测试程序 本文变量命名前缀: 全局变量:g_ 数组:a 指针:p 结构体:st unsigned int:ui 本文代码可以到Github下载:...
  • LeetCode 048 Rotate Image

    2016-05-30 09:04:40
    题目要求将一个n*n的方阵顺时针旋转90度。使用原方阵的空间(in-place)。
  • Rotate Image - LeetCode 48

    2015-05-15 20:52:47
    题目描述: 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?...此题要求将一个 n x n 方阵顺时针旋转90度。分析后可发
  • 一、问题描述 You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...首先明确题意:将一个n阶方阵顺时针旋转90度。 这种类型的题目往
  • 如何判断两个同阶方阵的关系

    千次阅读 2013-07-11 11:27:42
    矩阵B由矩阵A顺时针旋转90度; 矩阵B由矩阵A顺时针旋转180度; 矩阵B由矩阵A顺时针旋转270度; 矩阵B由矩阵A延中垂线反射; 矩阵B和矩阵A相等; 代码如下: n为方阵阶数。 int spin90(char A[],char B[],int n) { ...
  • 旋转一个二维方数组

    2017-04-06 16:00:41
    顺时针旋转 做法:先对方阵作副对角线对称变换;...旋转90度就作一次变换,同理180度就作两次就好。Code : // 顺时针 for (int i = 0; i ; ++i) // 沿着副对角线反转 for (int j = 0; j ; ++j) sw
  • 矩阵旋转

    2013-10-22 19:59:37
    //矩阵顺时针旋转90度,如果是in-place,则矩阵只能为方阵 //如果可以利用其它存储空间,则矩阵可以是m*n的,转换之后为n*m的 //i'(转换后行) = j(原列); j'(转换后列)= m-1-i(原行); //我们这里写就地逆置的 ...
  • leetcode48:矩阵旋转

    2019-09-26 20:40:33
    题目链接 输入一个N×N的方阵,要求...将点(x,y)绕原点顺时针旋转90度,变为(y,-x)。原来的(-y,x)变为(x,y) class Solution(object): def rotate(self, matrix): """ :type matrix: List[List[int]] :rtyp...
  •  用二维数组(方阵)表示一幅图片,在O(1)空间复杂度的前提下完成图片顺时针旋转90度 解题思路  首先,如果只是单纯旋转图片90度,可以根据当前矩阵内容将其按一定规则复制到另一个矩阵当中,然后将复制...
  • You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees ...这道题意思就是给出n*n的方阵,让你顺时针翻动90度,要求是原地进行操作,意思就是不用额外的存储空间。
  • Day6:刷题

    2020-03-05 22:59:55
    1.将一个n阶方阵旋转m次,每次顺时针旋转90度,求出最后旋转所得方阵 #include<iostream> #include<vector> using namespace std; void rollm(int m,int n,vector<vector<int>> & a ){ ...
  • LeetCode:Rotate Image

    2017-11-16 20:45:00
    You are given annxn2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Follow up: Could you do this in-place?...不使用额外的空间顺时针旋转方阵90度 例如 旋转后变为 算法1...
  • week11必做题B

    2020-05-02 11:39:05
    先把最初的方阵和目标方阵对比,如果相同直接输出0,如果不同,则将其顺时针旋转90度,一共3次,每次旋转后都和目标方阵比较,如果相同就输出,如果都不同则输出-1。 #include<iostream> using namesp...
  • OJ P1092 Matrix Rotation

    2020-12-08 23:18:46
    每次顺时针旋转90度,旋转四次回到原位,不难得出每次旋转后的矩阵结果,可以使用如下代码 /*以三维数组a[0][i][j]作为原始矩阵*/ for(k=1;k<4;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) a[k][i][j]=a[k...
  • leetcode Rotate Image

    2014-07-31 12:26:39
    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?...不使用额外的空间顺时针旋转方阵90度
  • 给出一个方阵,将其顺时针旋转90度后,输出结果。 限定条件,空间复杂度为常量。 显然,最容易想到的是一圈圈的交换元素旋转。不过代码实现有点复杂。 可以慢慢观察,矩阵先以副对角线交换后,再水平居中翻转,就...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

方阵顺时针旋转90度