Print concentric rectangular pattern in a 2d matrix.

Input: A = 4.
Output:

4 4 4 4 4 4 4
4 3 3 3 3 3 4
4 3 2 2 2 3 4
4 3 2 1 2 3 4
4 3 2 2 2 3 4
4 3 3 3 3 3 4
4 4 4 4 4 4 4

Solution:

Just mark four borders each loop

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
    public ArrayList<ArrayList<Integer>> prettyPrint(int a) {
        ArrayList<ArrayList<Integer>> result = new ArrayList();
        if(a == 0)
            return result;
        int n = 2*a -1;
        int[][] matrix = new int[n][n];
       
        int start = 0;
        int end = n - 1;
       
        for(;a>0;a--){
            //fill top
            for(int i = start; i <=end; i++ ){
                matrix[start][i] = a; //top
                matrix[i][end] = a; //right
                matrix[end][i] = a; // bottom
                matrix[i][start] = a; //left
            }
            start++;
            end--;
        }
       
        for(int j = 0; j < n; j++){
            ArrayList<Integer> temp = new ArrayList();
            for(int m = 0; m<n; m++){
                temp.add(matrix[j][m]);
            }
            result.add(temp);
        }
       
        return result;
    }