We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
public static void matrixRotation(List<List<Integer>> matrix, int r) {
int m = matrix.size();
int n = matrix.get(0).size();
int layers = Math.min(m, n) / 2;
for (int layer = 0; layer < layers; layer++) {
List<Integer> elements = new ArrayList<>();
// Top row
for (int i = layer; i < n - layer; i++) {
elements.add(matrix.get(layer).get(i));
}
// Right column
for (int i = layer + 1; i < m - layer - 1; i++) {
elements.add(matrix.get(i).get(n - layer - 1));
}
// Bottom row
for (int i = n - layer - 1; i >= layer; i--) {
elements.add(matrix.get(m - layer - 1).get(i));
}
// Left column
for (int i = m - layer - 2; i > layer; i--) {
elements.add(matrix.get(i).get(layer));
}
int len = elements.size();
int rot = r % len;
List<Integer> rotated = new ArrayList<>();
rotated.addAll(elements.subList(rot, len));
rotated.addAll(elements.subList(0, rot));
int index = 0;
// Top row
for (int i = layer; i < n - layer; i++) {
matrix.get(layer).set(i, rotated.get(index++));
}
// Right column
for (int i = layer + 1; i < m - layer - 1; i++) {
matrix.get(i).set(n - layer - 1, rotated.get(index++));
}
// Bottom row
for (int i = n - layer - 1; i >= layer; i--) {
matrix.get(m - layer - 1).set(i, rotated.get(index++));
}
// Left column
for (int i = m - layer - 2; i > layer; i--) {
matrix.get(i).set(layer, rotated.get(index++));
}
}
// Print the rotated matrix
for (List<Integer> row : matrix) {
System.out.println(row.stream().map(Object::toString).collect(Collectors.joining(" ")));
}
}
}
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String[] firstMultipleInput = bufferedReader.readLine().replaceAll("\\s+$", "").split(" ");
int m = Integer.parseInt(firstMultipleInput[0]);
int n = Integer.parseInt(firstMultipleInput[1]);
int r = Integer.parseInt(firstMultipleInput[2]);
List<List<Integer>> matrix = new ArrayList<>();
IntStream.range(0, m).forEach(i -> {
try {
matrix.add(
Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(Collectors.toList())
);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
});
Result.matrixRotation(matrix, r);
bufferedReader.close();
}
}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Matrix Layer Rotation
You are viewing a single comment's thread. Return to all comments →
import java.io.; import java.util.; import java.util.stream.*;
class Result {
}
public class Solution { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
}