Below, you will find a java implementation of class that does a matrix or 2 dimensional array rotation both clockwise and anti clockwise. The approach used here does not take extra buffer i.e. does the stuff IN-PLACE. There is another article in this blog where I have implemented this using extra buffer space.
package com.icodejava.blog.published.maths; import java.util.Arrays; /** * * @author Kushal Paudyal * Created on: 01/05/2017 * Last Modified on: 01/05/2017 * * This class demonstrates how to rotate a NxN array 90 degrees using no extra buffer. e.g. [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25]] should appear as [[5, 10, 15, 20, 25], [4, 9, 14, 19, 24], [3, 8, 13, 18, 23], [2, 7, 12, 17, 22], [1, 6, 11, 16, 21]] for a 90 degrees counter clockwise rotation [[21, 16, 11, 6, 1], [22, 17, 12, 7, 2], [23, 18, 13, 8, 3], [24, 19, 14, 9, 4], [25, 20, 15, 10, 5]] for a 90 degrees clockwise rotation */ public class Rotate2DArrayInPlace { public static void main (String args [] ) throws Exception { Integer [] [] myNxNArray = new Integer [][] { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16,17,18,19,20}, {21,22,23,24,25} }; System.out.println("SOURCE ARRAY: \n" + Arrays.deepToString(myNxNArray)); Integer [][] rotatedInPlace = rotateMatrixInPlaceCounterClockwise(myNxNArray); System.out.println("ROTATED IN PLACE - 90 degrees COUNTER CLOCKWISE"); System.out.println(Arrays.deepToString(rotatedInPlace)); //The array referenced in above definition myNxNArray is changed so you will need to redefine Integer [] [] myNxNArray1 = new Integer [][] { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16,17,18,19,20}, {21,22,23,24,25} }; Integer [][] rotatedInPlaceClockwise = rotateMatrixInPlaceClockwise(myNxNArray1); System.out.println("ROTATED IN PLACE - 90 degrees CLOCKWISE"); System.out.println(Arrays.deepToString(rotatedInPlaceClockwise)); } /** * This method rotates the matrix 90 degrees counter clockwise without using extra buffer.. */ public static Integer[][] rotateMatrixInPlaceCounterClockwise(Integer[][] matrix) throws Exception { if(matrix.length == 0 || matrix.length != matrix[0].length) { throw new Exception ("Invalid Input"); } int n = matrix[0].length; int tmp; for (int i = 0; i < n / 2; i++) { for (int j = i; j < n - i - 1; j++) { tmp = matrix[i][j]; matrix[i][j] = matrix[j][n - i - 1]; matrix[j][n - i - 1] = matrix[n - i - 1][n - j - 1]; matrix[n - i - 1][n - j - 1] = matrix[n - j - 1][i]; matrix[n - j - 1][i] = tmp; } } return matrix; } /** * This method rotates the matrix 90 degrees counter clockwise without using extra buffer.. */ public static Integer[][] rotateMatrixInPlaceClockwise(Integer[][] matrix) throws Exception { if(matrix.length == 0 || matrix.length != matrix[0].length) { throw new Exception ("Invalid Input"); } int n = matrix.length; int top; for (int i = 0; i < n / 2; i++) { for (int j = i; j < n - i - 1; j++) { top = matrix[i][j]; matrix[i][j] = matrix[n - j - 1][i]; matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]; matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]; matrix[j] [n - i - 1] = top; } } return matrix; } }
OUTPUT:
SOURCE ARRAY: [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25]] ROTATED IN PLACE - 90 degrees COUNTER CLOCKWISE [[5, 10, 15, 20, 25], [4, 9, 14, 19, 24], [3, 8, 13, 18, 23], [2, 7, 12, 17, 22], [1, 6, 11, 16, 21]] ROTATED IN PLACE - 90 degrees CLOCKWISE [[21, 16, 11, 6, 1], [22, 17, 12, 7, 2], [23, 18, 13, 8, 3], [24, 19, 14, 9, 4], [25, 20, 15, 10, 5]]
More from: Algorithm
- Recursively Finding Greatest Common Divisor (GCD) – Java Implementation
- Implementing a Simple LIFO Stack in Java using LinkedList
- Implementing a Simple FIFO Queue in Java Using Linked List
- In Place Matrix (2D Array) Clockwise and Counterclockwise Rotation – Java Implementation
- Matrix (2D Array) Clockwise and Counterclockwise Rotation with Extra Buffer – Java Implementation
- Array Max Integer Finder (With Big O Analysis)
- A Basic Implementation of Binary Tree in Java
- A Basic Implementation of Generic Tree in Java
- Basic example of implementing Singly Linked List in Java
- Prime Number Finder In Java
- Printing Fibonacci Sequence Using Recursive and Iterative Methods
- Finding Square Root Of A Double Number In Java Using Binary Search
- How to Add and Remove nodes in an unsorted Linked List
- How to swap two variables without using extra temporary variable?
- Rotating a two dimensional integer array In-Place and using extra memory
- How to reverse a Singly Linked List iteratively and recursively
- Sorted Circular Linked List Implementation And Insert Operation
- Finding Mean Value Of An Integer Array In Java
- How to intersect two sets in Java using java.util.Set data structure.
- Bubble Sorting An Integer Array In Ascending and Descending Order
- How to split strings and separate the words with spaces
- How to easily sort characters in a String?
Why visitors still use to read news papers when in this technological world all is available on net?