Rotate matrix counter-clockwise N times in Java

The challenge

In this challenge your mission is to rotate matrix counter-clockwise N times.

So, you will have 2 inputs:

1) matrix 2) a number, how many times to turn it

And the output is turned matrix.

Example:

matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] times_to_turn = 1

It should return this:

[[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]])
Code language: CSS (css)

Note: all matrixes will be square. Also, random tests will have big numbers in the input (times to turn)

The solution in Java code

Option 1:

public class Solution { public static int[][] rotateCounterclockwise(int[][] matrix, int times) { int matlen = matrix.length; for (int n = 0; n < times % 4; n++) { int[][] element = new int[matlen][matlen]; for (int i = 0; i < matlen; i++) { for (int j = 0; j < matlen; j++) { element[i][j] = matrix[j][matlen - 1 - i]; } } matrix = element; } return matrix; } }
Code language: Java (java)

Option 2:

public class Solution { public static int[][] rotateCounterclockwise(int[][] matrix, int times) { int size = matrix.length; int mat[][] = new int[size][size]; int temp[][]; times = times % 4; if (times==0) return matrix; while(times-->0) { for(int i=0,y=0;i<size;i++,y++) for(int j=0,x=size-1;j<size;j++,x--) mat[x][y]=matrix[i][j]; if(times>0){ temp=matrix; matrix=mat; mat=temp; } } return mat; } }
Code language: Java (java)

Option 3:

public class Solution { public static int[][] rotateCounterclockwise(int[][] matrix, int times) { times = times % 4; while(times > 0) { matrix = rotateOnce(matrix); times--; } return matrix; } private static int[][] rotateOnce(int[][] matrix) { int[][] r = new int[matrix.length][matrix.length]; for (int i = r.length-1; i >=0; i--) { for (int j = 0; j < r.length; j++) { r[r.length-1-i][j] = matrix[j][i]; } } return r; } }
Code language: Java (java)

Test cases to validate our solution

import org.junit.Test; import java.util.Random; import java.util.function.BiFunction; import java.util.function.IntFunction; import java.util.function.IntSupplier; import java.util.stream.IntStream; import java.util.stream.Stream; import org.junit.Assert; public class SolutionTest { @Test public void exampleTest() { Assert.assertArrayEquals(new int[][] { {2, 4}, {1, 3}}, Solution.rotateCounterclockwise(new int[][] { {1, 2}, {3, 4}}, 1)); Assert.assertArrayEquals(new int[][] { {4, 8, 12, 16}, {3, 7, 11, 15}, {2, 6, 10, 14}, {1, 5, 9, 13}}, Solution.rotateCounterclockwise(new int[][] { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}, 1)); Assert.assertArrayEquals(new int[][] { {16, 15, 14, 13}, {12, 11, 10, 9}, {8, 7, 6, 5}, {4, 3, 2, 1}}, Solution.rotateCounterclockwise(new int[][] { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}, 2)); Assert.assertArrayEquals(new int[][] { {57, 49, 41, 33, 25, 17, 9, 1}, {58, 50, 42, 34, 26, 18, 10, 2}, {59, 51, 43, 35, 27, 19, 11, 3}, {60, 52, 44, 36, 28, 20, 12, 4}, {61, 53, 45, 37, 29, 21, 13, 5}, {62, 54, 46, 38, 30, 22, 14, 6}, {63, 55, 47, 39, 31, 23, 15, 7}, {64, 56, 48, 40, 32, 24, 16, 8}}, Solution.rotateCounterclockwise(new int[][] { {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, 26, 27, 28, 29, 30, 31, 32}, {33, 34, 35, 36, 37, 38, 39, 40}, {41, 42, 43, 44, 45, 46, 47, 48}, {49, 50, 51, 52, 53, 54, 55, 56}, {57, 58, 59, 60, 61, 62, 63, 64}}, 3)); } }
Code language: Java (java)
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments