Open In App

Java Program to Print Spiral Pattern of Numbers

Last Updated : 12 Sep, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given a number n as the size of the matrix, the task is to print a spiral pattern of size n.

Examples:

Input : n = 4
Output: 1   2  3 4 
    12 13 14 5 
    11 16 15 6 
    10  9  8 7

Preview of the Spiral Pattern:

Lightbox 

Java




public class GFG {
 
    public static void printSpiral(int size)
    {
 
        // Create row and col
        // to traverse rows and columns
        int row = 0, col = 0;
 
        int boundary = size - 1;
        int sizeLeft = size - 1;
        int flag = 1;
 
        // Variable to determine the movement
        // r = right, l = left, d = down, u = upper
        char move = 'r';
 
        // Array for matrix
        int matrix[][] = new int[size][size];
 
        for (int i = 1; i < size * size + 1; i++) {
 
            // Assign the value
            matrix[row][col] = i;
 
            // switch-case to determine the next index
            switch (move) {
 
            // If right, go right
            case 'r':
                col += 1;
                break;
 
            // if left, go left
            case 'l':
                col -= 1;
                break;
 
            // if up, go up
            case 'u':
                row -= 1;
                break;
 
            // if down, go down
            case 'd':
                row += 1;
                break;
            }
 
            // Check if the matrix
            // has reached array boundary
            if (i == boundary) {
 
                // Add the left size for the next boundary
                boundary += sizeLeft;
 
                // If 2 rotations has been made,
                // decrease the size left by 1
                if (flag != 2) {
 
                    flag = 2;
                }
                else {
 
                    flag = 1;
                    sizeLeft -= 1;
                }
 
                // switch-case to rotate the movement
                switch (move) {
 
                // if right, rotate to down
                case 'r':
                    move = 'd';
                    break;
 
                // if down, rotate to left
                case 'd':
                    move = 'l';
                    break;
 
                // if left, rotate to up
                case 'l':
                    move = 'u';
                    break;
 
                // if up, rotate to right
                case 'u':
                    move = 'r';
                    break;
                }
            }
        }
 
        // Print the matrix
        for (row = 0; row < size; row++) {
            for (col = 0; col < size; col++) {
 
                int n = matrix[row][col];
                System.out.print((n < 10) ? (n + " ")
                                          : (n + " "));
            }
 
            System.out.println();
        }
    }
 
    // Driver Code
    public static void main(String[] args)
    {
 
        // Get the size of size
        int size = 5;
 
        // Print the Spiral Pattern
        printSpiral(size);
    }
}


Output

1 2 3 4 5 
16 17 18 19 6 
15 24 25 20 7 
14 23 22 21 8 
13 12 11 10 9 

Time complexity: O(n*n) where n is given size of matrix

Auxiliary space : O(n*n) for 2-d matrix



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads