• + 0 comments
    public static void matrixRotation(List<List<Integer>> matrix, int r){
      int n = matrix.size();
      int m = matrix.get(0).size();
      int min = Math.min(n, m);
      
    
      
    for (int i=0;i< min/2; i++) {
        int round = r % ((n - 2 * i) * 2 + (m - 2 * i) * 2 - 4);
        int k=0;
        while(k<round){
        
        int first = i;
        //int last = Math.min(m - i - 1, n - i - 1);
        int lastN = n - i - 1;
        int lastM = m - i - 1;
        int temp = matrix.get(first).get(first);
        for (int j = first; j < lastM; j++) {
            matrix.get(first).set(j, matrix.get(first).get(j + 1));
        }
        for (int j = first; j < lastN; j++) {
            matrix.get(j).set(lastM, matrix.get(j + 1).get(lastM));
        }
        for (int j = lastM; j > first; j--) {
            matrix.get(lastN).set(j, matrix.get(lastN).get(j - 1));
        }
        for (int j = lastN; j > first; j--) {
            matrix.get(j).set(first, matrix.get(j - 1).get(first));
        }
        matrix.get(first + 1).set(first, temp);
        k++;
        }
    }
        matrix.forEach(row -> {
                String rowString = row.stream()
                        .map(Object::toString)
                        .collect(Collectors.joining(" ")); 
                System.out.println(rowString);
            });
    
        }
        
    }