在不使用任何额外空间的情况下将矩阵旋转90度|集2

给定一个方阵,将其逆时针旋转90度,不使用任何额外空间。

null

例如:

Input: 1  2  3 4  5  6 7  8  9Output: 3  6  9  2  5  8  1  4  7 Rotated the input matrix by90 degrees in anti-clockwise direction.Input: 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 Output: 4  8 12 16  3  7 11 15  2  6 10 14  1  5  9 13Rotated the input matrix by90 degrees in anti-clockwise direction.

另一篇文章中已经讨论了一种需要额外空间的方法: 原地旋转方阵90度|设置1

这篇文章用一种空间优化的不同方法讨论了同样的问题。 方法: 其思想是找到矩阵的转置,然后反转转置矩阵的列。 下面是一个例子来说明这是如何工作的。

图片[1]-在不使用任何额外空间的情况下将矩阵旋转90度|集2-yiteyi-C++库

算法:

  1. 要解决给定的问题,有两项任务。第一个是找到转置,第二个是在不使用额外空间的情况下反转列
  2. 矩阵的转置是指矩阵在其对角线上翻转,即元素的行索引变为列索引,反之亦然。因此,为了找到转置,将(i,j)位置的元素与(j,i)交换。运行两个循环,外部循环从0到行计数,内部循环从0到外部循环的索引。
  3. 为了反转转置矩阵的列,运行两个嵌套循环,外部循环从0到列计数,内部循环从0到行计数/2,将(i,j)处的元素与(i,row[count-1-j])交换,其中i和j分别是内部循环和外部循环的索引。

C++

// C++ program for left
// rotation of matrix by 90 degree
// without using extra space
#include <bits/stdc++.h>
using namespace std;
#define R 4
#define C 4
// After transpose we swap
// elements of column
// one by one for finding left
// rotation of matrix
// by 90 degree
void reverseColumns( int arr[R][C])
{
for ( int i = 0; i < C; i++)
for ( int j = 0, k = C - 1; j < k; j++, k--)
swap(arr[j][i], arr[k][i]);
}
// Function for do transpose of matrix
void transpose( int arr[R][C])
{
for ( int i = 0; i < R; i++)
for ( int j = i; j < C; j++)
swap(arr[i][j], arr[j][i]);
}
// Function for print matrix
void printMatrix( int arr[R][C])
{
for ( int i = 0; i < R; i++) {
for ( int j = 0; j < C; j++)
cout << arr[i][j] << " " ;
cout << '' ;
}
}
// Function to anticlockwise
// rotate matrix by 90 degree
void rotate90( int arr[R][C])
{
transpose(arr);
reverseColumns(arr);
}
// Driven code
int main()
{
int arr[R][C] = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
rotate90(arr);
printMatrix(arr);
return 0;
}


JAVA

// JAVA Code for left Rotation of a
// matrix by 90 degree without using
// any extra space
import java.util.*;
class GFG {
// After transpose we swap elements of
// column one by one for finding left
// rotation of matrix by 90 degree
static void reverseColumns( int arr[][])
{
for ( int i = 0 ; i < arr[ 0 ].length; i++)
for ( int j = 0 , k = arr[ 0 ].length - 1 ; j < k;
j++, k--) {
int temp = arr[j][i];
arr[j][i] = arr[k][i];
arr[k][i] = temp;
}
}
// Function for do transpose of matrix
static void transpose( int arr[][])
{
for ( int i = 0 ; i < arr.length; i++)
for ( int j = i; j < arr[ 0 ].length; j++) {
int temp = arr[j][i];
arr[j][i] = arr[i][j];
arr[i][j] = temp;
}
}
// Function for print matrix
static void printMatrix( int arr[][])
{
for ( int i = 0 ; i < arr.length; i++) {
for ( int j = 0 ; j < arr[ 0 ].length; j++)
System.out.print(arr[i][j] + " " );
System.out.println( "" );
}
}
// Function to anticlockwise rotate
// matrix by 90 degree
static void rotate90( int arr[][])
{
transpose(arr);
reverseColumns(arr);
}
/* Driver program to test above function */
public static void main(String[] args)
{
int arr[][] = { { 1 , 2 , 3 , 4 },
{ 5 , 6 , 7 , 8 },
{ 9 , 10 , 11 , 12 },
{ 13 , 14 , 15 , 16 } };
rotate90(arr);
printMatrix(arr);
}
}
// This code is contributed by Arnav Kr. Mandal.


C#

// C# program for left rotation
// of matrix by 90 degree
// without using extra space
using System;
class GFG {
static int R = 4;
static int C = 4;
// After transpose we swap
// elements of column one
// by one for finding left
// rotation of matrix by
// 90 degree
static void reverseColumns( int [, ] arr)
{
for ( int i = 0; i < C; i++)
for ( int j = 0, k = C - 1; j < k; j++, k--) {
int temp = arr[j, i];
arr[j, i] = arr[k, i];
arr[k, i] = temp;
}
}
// Function for do
// transpose of matrix
static void transpose( int [, ] arr)
{
for ( int i = 0; i < R; i++)
for ( int j = i; j < C; j++) {
int temp = arr[j, i];
arr[j, i] = arr[i, j];
arr[i, j] = temp;
}
}
// Function for print matrix
static void printMatrix( int [, ] arr)
{
for ( int i = 0; i < R; i++) {
for ( int j = 0; j < C; j++)
Console.Write(arr[i, j] + " " );
Console.WriteLine( "" );
}
}
// Function to anticlockwise
// rotate matrix by 90 degree
static void rotate90( int [, ] arr)
{
transpose(arr);
reverseColumns(arr);
}
// Driver code
static void Main()
{
int [, ] arr = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
rotate90(arr);
printMatrix(arr);
}
// This code is contributed
// by Sam007
}


Python3

# Python 3 program for left rotation of matrix by 90
# degree without using extra space
R = 4
C = 4
# After transpose we swap elements of column
# one by one for finding left rotation of matrix
# by 90 degree
def reverseColumns(arr):
for i in range (C):
j = 0
k = C - 1
while j < k:
t = arr[j][i]
arr[j][i] = arr[k][i]
arr[k][i] = t
j + = 1
k - = 1
# Function for do transpose of matrix
def transpose(arr):
for i in range (R):
for j in range (i, C):
t = arr[i][j]
arr[i][j] = arr[j][i]
arr[j][i] = t
# Function for print matrix
def printMatrix(arr):
for i in range (R):
for j in range (C):
print ( str (arr[i][j]), end = " " )
print ()
# Function to anticlockwise rotate matrix
# by 90 degree
def rotate90(arr):
transpose(arr)
reverseColumns(arr)
# Driven code
arr = [[ 1 , 2 , 3 , 4 ],
[ 5 , 6 , 7 , 8 ],
[ 9 , 10 , 11 , 12 ],
[ 13 , 14 , 15 , 16 ]
]
rotate90(arr)
printMatrix(arr)


PHP

<?php
// PHP program for left rotation of matrix by 90
$R = 4;
$C = 4;
// Function to rotate the matrix by 90 degree
function reverseColumns(& $arr )
{
global $C ;
for ( $i = 0; $i < $C ; $i ++)
{
for ( $j = 0, $k = $C - 1; $j < $k ; $j ++, $k --)
{
$t = $arr [ $j ][ $i ];
$arr [ $j ][ $i ] = $arr [ $k ][ $i ];
$arr [ $k ][ $i ] = $t ;
}
}
}
// Function for transpose of matrix
function transpose(& $arr )
{
global $R , $C ;
for ( $i = 0; $i < $R ; $i ++)
{
for ( $j = $i ; $j < $C ; $j ++)
{
$t = $arr [ $i ][ $j ];
$arr [ $i ][ $j ] = $arr [ $j ][ $i ];
$arr [ $j ][ $i ] = $t ;
}
}
}
// Function for display the matrix
function printMatrix(& $arr )
{
global $R , $C ;
for ( $i = 0; $i < $R ; $i ++) {
for ( $j = 0; $j < $C ; $j ++)
echo $arr [ $i ][ $j ]. " " ;
echo "" ;
}
}
// Function to anticlockwise rotate matrix
// by 90 degree
function rotate90(& $arr )
{
transpose( $arr );
reverseColumns( $arr );
}
// Driven code
$arr = array ( array ( 1, 2, 3, 4 ),
array ( 5, 6, 7, 8 ),
array ( 9, 10, 11, 12 ),
array ( 13, 14, 15, 16 ) );
rotate90( $arr );
printMatrix( $arr );
return 0;
?>


Javascript

<script>
// JAVASCRIPT Code for left Rotation of a
// matrix by 90 degree without using
// any extra space
// After transpose we swap elements of
// column one by one for finding left
// rotation of matrix by 90 degree
function reverseColumns(arr)
{
for (let i = 0; i < arr[0].length; i++)
for (let j = 0, k = arr[0].length - 1;
j < k; j++, k--) {
let temp = arr[j][i];
arr[j][i] = arr[k][i];
arr[k][i] = temp;
}
}
// Function for do transpose of matrix
function transpose(arr)
{
for (let i = 0; i < arr.length; i++)
for (let j = i; j < arr[0].length;
j++) {
let temp = arr[j][i];
arr[j][i] = arr[i][j];
arr[i][j] = temp;
}
}
// Function for print matrix
function printMatrix(arr)
{
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[0].length;
j++)
document.write(arr[i][j] + " " );
document.write( "<br>" );
}
}
// Function to anticlockwise rotate
// matrix by 90 degree
function rotate90(arr)
{
transpose(arr);
reverseColumns(arr);
}
/* Driver program to test above function */
let arr = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
];
rotate90(arr)
printMatrix(arr)
// This code is contributed by rag2127
</script>


输出

4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 

复杂性分析:

  • 时间复杂性: O(R*C)。 矩阵被遍历两次,因此复杂度为O(R*C)。
  • 空间复杂性: O(1)。 空间复杂度是恒定的,因为不需要额外的空间。

另一种方法是使用 矩阵的单次遍历:

这个想法是沿着矩阵的边界移动元素的位置 0 每个边界的逆时针方向。矩阵中存在这样的(n/2-1)边界。

算法:

  1. 迭代矩阵中的所有边界。共有(n/2-1)个边界
  2. 对于每个边界,取4个角元素并交换它们,使4个角元素逆时针旋转。然后沿着边缘(左、右、上、下)取下4个元素,并逆时针交换它们。只要该特定边界中的所有元素都以90度旋转,就可以继续 0 逆时针方向。
  3. 然后移动到下一个内边界,继续这个过程,只要整个矩阵旋转90度 0 逆时针方向。
图片[2]-在不使用任何额外空间的情况下将矩阵旋转90度|集2-yiteyi-C++库

原始数组

图片[3]-在不使用任何额外空间的情况下将矩阵旋转90度|集2-yiteyi-C++库

总n/2-1边界

图片[4]-在不使用任何额外空间的情况下将矩阵旋转90度|集2-yiteyi-C++库

最外面的边界

图片[5]-在不使用任何额外空间的情况下将矩阵旋转90度|集2-yiteyi-C++库

下一个内边界

C++14

// C++ program for left rotation of matrix
// by 90 degree without using extra space
#include <bits/stdc++.h>
using namespace std;
#define R 4
#define C 4
// Function to rotate matrix anticlockwise by 90 degrees.
void rotateby90( int arr[R][C])
{
int n = R; // n=size of the square matrix
int a = 0, b = 0, c = 0, d = 0;
// iterate over all the boundaries of the matrix
for ( int i = 0; i <= n / 2 - 1; i++) {
// for each boundary, keep on taking 4 elements (one
// each along the 4 edges) and swap them in
// anticlockwise manner
for ( int j = 0; j <= n - 2 * i - 2; j++) {
a = arr[i + j][i];
b = arr[n - 1 - i][i + j];
c = arr[n - 1 - i - j][n - 1 - i];
d = arr[i][n - 1 - i - j];
arr[i + j][i] = d;
arr[n - 1 - i][i + j] = a;
arr[n - 1 - i - j][n - 1 - i] = b;
arr[i][n - 1 - i - j] = c;
}
}
}
// Function for print matrix
void printMatrix( int arr[R][C])
{
for ( int i = 0; i < R; i++) {
for ( int j = 0; j < C; j++)
cout << arr[i][j] << " " ;
cout << '' ;
}
}
// Driven code
int main()
{
int arr[R][C] = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
rotateby90(arr);
printMatrix(arr);
return 0;
}
// This code is contributed by Md. Enjamum
// Hossain(enja_2001)


JAVA

// JAVA Code for left Rotation of a matrix
// by 90 degree without using any extra space
import java.util.*;
class GFG {
// Function to rotate matrix anticlockwise by 90
// degrees.
static void rotateby90( int arr[][])
{
int n = arr.length;
int a = 0 , b = 0 , c = 0 , d = 0 ;
// iterate over all the boundaries of the matrix
for ( int i = 0 ; i <= n / 2 - 1 ; i++) {
// for each boundary, keep on taking 4 elements
// (one each along the 4 edges) and swap them in
// anticlockwise manner
for ( int j = 0 ; j <= n - 2 * i - 2 ; j++) {
a = arr[i + j][i];
b = arr[n - 1 - i][i + j];
c = arr[n - 1 - i - j][n - 1 - i];
d = arr[i][n - 1 - i - j];
arr[i + j][i] = d;
arr[n - 1 - i][i + j] = a;
arr[n - 1 - i - j][n - 1 - i] = b;
arr[i][n - 1 - i - j] = c;
}
}
}
// Function for print matrix
static void printMatrix( int arr[][])
{
for ( int i = 0 ; i < arr.length; i++) {
for ( int j = 0 ; j < arr[ 0 ].length; j++)
System.out.print(arr[i][j] + " " );
System.out.println( "" );
}
}
/* Driver program to test above function */
public static void main(String[] args)
{
int arr[][] = { { 1 , 2 , 3 , 4 },
{ 5 , 6 , 7 , 8 },
{ 9 , 10 , 11 , 12 },
{ 13 , 14 , 15 , 16 } };
rotateby90(arr);
printMatrix(arr);
}
}
// This code is contributed by Md. Enjamum
// Hossain(enja_2001)


C#

// C# Code for left Rotation of a matrix
// by 90 degree without using any extra space
using System;
using System.Collections.Generic;
public class GFG {
// Function to rotate matrix anticlockwise by 90
// degrees.
static void rotateby90( int [,]arr)
{
int n = arr.GetLength(0);
int a = 0, b = 0, c = 0, d = 0;
// iterate over all the boundaries of the matrix
for ( int i = 0; i <= n / 2 - 1; i++) {
// for each boundary, keep on taking 4 elements
// (one each along the 4 edges) and swap them in
// anticlockwise manner
for ( int j = 0; j <= n - 2 * i - 2; j++) {
a = arr[i + j,i];
b = arr[n - 1 - i,i + j];
c = arr[n - 1 - i - j,n - 1 - i];
d = arr[i,n - 1 - i - j];
arr[i + j,i] = d;
arr[n - 1 - i,i + j] = a;
arr[n - 1 - i - j,n - 1 - i] = b;
arr[i,n - 1 - i - j] = c;
}
}
}
// Function for print matrix
static void printMatrix( int [,]arr)
{
for ( int i = 0; i < arr.GetLength(0); i++) {
for ( int j = 0; j < arr.GetLength(1); j++)
Console.Write(arr[i,j] + " " );
Console.WriteLine( "" );
}
}
/* Driver program to test above function */
public static void Main(String[] args)
{
int [,]arr = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
rotateby90(arr);
printMatrix(arr);
}
}
// This code is contributed by umadevi9616


Javascript

<script>
// JavaScript Code for left Rotation of a matrix
// by 90 degree without using any extra space
// Function to rotate matrix anticlockwise by 90
// degrees.
function rotateby90(arr)
{
let n = arr.length;
let a = 0, b = 0, c = 0, d = 0;
// iterate over all the boundaries of the matrix
for (let i = 0; i <= n / 2 - 1; i++) {
// for each boundary, keep on taking 4 elements
// (one each along the 4 edges) and swap them in
// anticlockwise manner
for (let j = 0; j <= n - 2 * i - 2; j++) {
a = arr[i + j][i];
b = arr[n - 1 - i][i + j];
c = arr[n - 1 - i - j][n - 1 - i];
d = arr[i][n - 1 - i - j];
arr[i + j][i] = d;
arr[n - 1 - i][i + j] = a;
arr[n - 1 - i - j][n - 1 - i] = b;
arr[i][n - 1 - i - j] = c;
}
}
}
// Function for print matrix
function printMatrix(arr)
{
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[0].length; j++)
document.write(arr[i][j] + " " );
document.write( "<br>" );
}
}
/* Driver program to test above function */
let arr=[[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 9, 10, 11, 12 ],
[ 13, 14, 15, 16 ]];
rotateby90(arr);
printMatrix(arr);
// This code is contributed by avanitrachhadiya2155
</script>


输出

4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 

复杂性分析:

时间复杂性 :O(R*C)。 矩阵只遍历一次,因此时间复杂度为O(R*C)。

空间复杂性:O(1) .由于不需要额外的空间,因此空间复杂度为O(1)。

实施 :让我们来看一个解决问题的方法 Python numpy 这可以用来得出特定的解决方案。

Python3

# Alternative implementation using numpy
import numpy
# Driven code
arr = [[ 1 , 2 , 3 , 4 ],
[ 5 , 6 , 7 , 8 ],
[ 9 , 10 , 11 , 12 ],
[ 13 , 14 , 15 , 16 ]
]
# Define flip algorithm (Note numpy.flip is a builtin f
# function for versions > v.1.12.0)
def flip(m, axis):
if not hasattr (m, 'ndim' ):
m = asarray(m)
indexer = [ slice ( None )] * m.ndim
try :
indexer[axis] = slice ( None , None , - 1 )
except IndexError:
raise ValueError( "axis =% i is invalid for the % i-dimensional input array"
% (axis, m.ndim))
return m[ tuple (indexer)]
# Transpose the matrix
trans = numpy.transpose(arr)
# Flip the matrix anti-clockwise (1 for clockwise)
flipmat = flip(trans, 0 )
print ( "numpy implementation" )
print (flipmat)


输出:

numpy implementation[[ 4  8 12 16] [ 3  7 11 15] [ 2  6 10 14] [ 1  5  9 13]]

注: 上述步骤/程序会向左(或逆时针)旋转。让我们看看如何做正确的旋转或顺时针旋转。方法也会类似。找到矩阵的转置,然后反转转置矩阵的行。 就是这样做的。

图片[6]-在不使用任何额外空间的情况下将矩阵旋转90度|集2-yiteyi-C++库

本文由 丹麦拉扎 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

沿着边界旋转

我们可以从给定矩阵的前4个角开始,然后不断增加行和列索引,以进行移动。

在任何给定的时刻,我们将有四个角lu(左上)、ld(左下)、ru(右上)、rd(右下)。

要向左旋转,我们首先交换ru和ld,然后交换lu和ld,最后交换ru和rd。

研发部 ld

C++

#include <bits/stdc++.h>
using namespace std;
//Function to rotate matrix anticlockwise by 90 degrees.
void rotateby90(vector<vector< int > >& matrix)
{
int n=matrix.size();
int mid;
if (n%2==0)
mid=n/2-1;
else
mid=n/2;
for ( int i=0,j=n-1;i<=mid;i++,j--)
{
for ( int k=0;k<j-i;k++)
{
swap(matrix[i][j-k],matrix[j][i+k]); //ru  ld
swap(matrix[i+k][i],matrix[j][i+k]); //lu ld
swap(matrix[i][j-k],matrix[j-k][j]); //ru rd
}
}
}
void printMatrix(vector<vector< int >>& arr)
{
int n=arr.size();
for ( int i=0;i<n;i++)
{
for ( int j=0;j<n;j++)
{
cout<<arr[i][j]<< " " ;
}
cout<<endl;
}
}
int main() {
vector<vector< int >> arr = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
rotateby90(arr);
printMatrix(arr);
return 0;
}


JAVA

import java.util.*;
class GFG{
private static int [][] swap( int [][] matrix, int x1, int x2, int y1, int y2) {
int temp = matrix[x1][x2] ;
matrix[x1][x2] = matrix[y1][y2];
matrix[y1][y2] = temp;
return matrix;
}
//Function to rotate matrix anticlockwise by 90 degrees.
static int [][] rotateby90( int [][] matrix)
{
int n=matrix.length;
int mid;
if (n % 2 == 0 )
mid = n / 2 - 1 ;
else
mid = n / 2 ;
for ( int i = 0 , j = n - 1 ; i <= mid; i++, j--)
{
for ( int k = 0 ; k < j - i; k++)
{
matrix= swap(matrix, i, j - k, j, i + k); //ru  ld
matrix= swap(matrix, i + k, i, j, i + k); //lu ld
matrix= swap(matrix, i, j - k, j - k, j); //ru rd
}
}
return matrix;
}
static void printMatrix( int [][] arr)
{
int n = arr.length;
for ( int i = 0 ; i < n; i++)
{
for ( int j = 0 ; j < n; j++)
{
System.out.print(arr[i][j] + " " );
}
System.out.println();
}
}
public static void main(String[] args) {
int [][] arr = { { 1 , 2 , 3 , 4 },
{ 5 , 6 , 7 , 8 },
{ 9 , 10 , 11 , 12 },
{ 13 , 14 , 15 , 16 } };
arr = rotateby90(arr);
printMatrix(arr);
}
}
// This code is contributed by umadevi9616


C#

using System;
public class GFG{
private static int [,] swap( int [,] matrix, int x1, int x2, int y1, int y2) {
int temp = matrix[x1,x2] ;
matrix[x1,x2] = matrix[y1,y2];
matrix[y1,y2] = temp;
return matrix;
}
//Function to rotate matrix anticlockwise by 90 degrees.
static int [,] rotateby90( int [,] matrix)
{
int n=matrix.GetLength(0);
int mid;
if (n % 2 == 0)
mid = (n / 2 - 1);
else
mid = (n / 2);
for ( int i = 0, j = n - 1; i <= mid; i++, j--)
{
for ( int k = 0; k < j - i; k++)
{
matrix= swap(matrix, i, j - k, j, i + k); //ru  ld
matrix= swap(matrix, i + k, i, j, i + k); //lu ld
matrix= swap(matrix, i, j - k, j - k, j); //ru rd
}
}
return matrix;
}
static void printMatrix( int [,] arr)
{
int n = arr.GetLength(0);
for ( int i = 0; i < n; i++)
{
for ( int j = 0; j < n; j++)
{
Console.Write(arr[i,j] + " " );
}
Console.WriteLine();
}
}
public static void Main(String[] args) {
int [,] arr = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
arr = rotateby90(arr);
printMatrix(arr);
}
}
// This code is contributed by Rajput-Ji


Javascript

<script>
function swap(matrix , x1 , x2 , y1 , y2) {
var temp = matrix[x1][x2];
matrix[x1][x2] = matrix[y1][y2];
matrix[y1][y2] = temp;
return matrix;
}
// Function to rotate matrix anticlockwise by 90 degrees.
function rotateby90(matrix) {
var n = matrix.length;
var mid;
if (n % 2 == 0)
mid = n / 2 - 1;
else
mid = n / 2;
for (i = 0, j = n - 1; i <= mid; i++, j--) {
for (k = 0; k < j - i; k++) {
matrix = swap(matrix, i, j - k, j, i + k); // ru ld
matrix = swap(matrix, i + k, i, j, i + k); // lu ld
matrix = swap(matrix, i, j - k, j - k, j); // ru rd
}
}
return matrix;
}
function printMatrix(arr) {
var n = arr.length;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
document.write(arr[i][j] + " " );
}
document.write( "<br/>" );
}
}
var arr = [ [ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 9, 10, 11, 12 ],
[ 13, 14, 15, 16 ] ];
arr = rotateby90(arr);
printMatrix(arr);
// This code is contributed by Rajput-Ji
</script>


输出:

4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 

时间复杂度:O(n^2)

空间复杂性:O(1)

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享