help | forum home | logged in as: guest | login/register
link mingle
interview_questions
Bookmarks
Print 2-D Array Spirally
10
Votes

Given a matrix (2D array) of m x n elements (m rows, n columns), write a function that prints the elements in the array in a spiral manner. Sample input matrix:
 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
Correct output for above sample input: 1 2 3 4 5 6 12 18 24 30 29 28 27 26 25 19 13 7 8 9 10 11 17 23 22 21 20 14 15 16

saved under Amazon Interview Questions by interview_questions

 
The logic can be divided into four following steps 1. print top_left->top_right 2. print top_right->bottom_right 3. print bottom_right->bottom_left 4. print bottom_left->top_left-1 for every iteration do left++, right--, top++, bottom--
comment by sachidanand on 2009-09-29 07:28:19
public class SpliralPrintin { public SpliralPrintin() { super(); } public static void main(String[] args) { int a[][]=new int[4][6]; int a1[]={11,12,13,14,15,16}; int a2[]={21,22,23,24,25,26}; int a3[]={31,32,33,34,35,36}; int a4[]={41,42,43,44,45,46}; a[0]=a1; a[1]=a2; a[2]=a3; a[3]=a4; printArr(a); printSpiral(a); } static void printSpiral(int[][] a) { int m, n = 0; /* * 1234.....m * 12345....m * .. * .. * .. n times * 1234.....m * */ n = a.length; m = a[0].length; int nextToPrinRow = m; int nextToPrinCol = n; int row=0, col = 0; int k = 0; int turn=0; int turnTemp=0; int rt=0,rb=n-1,cl=0,cr=m-1; for (int i = 0; i < m * n; i++) { if(turn==0){ if (k<=cr) { row=rt; col=k; k++; if(k>cr){ turnTemp=1; rt++; k=rt; } } } if(turn==1){ if (k<=rb) { row=k; col=cr; k++; if(k>rb){ turnTemp=2; cr--; k=cr; } } } if(turn==2){ if (k>=cl) { row=rb; col=k; k--; if(k<cl){ turnTemp=3; rb--; k=rb; } } } if(turn==3){ if (k>=rt) { row=k; col=cl; k--; if(k<rt){ turnTemp=0; cl++; k=cl; } } } System.out.print(a[row][col]+" "); turn=turnTemp; } } static void printArr(int [][]a){ for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[0].length; j++) { System.out.print(a[i][j] + " "); } System.out.println(""); } } }
comment by hckr85 on 2009-10-30 13:48:46
static void printSpiral(int[][] a) { int m, n = 0; /* * 1234.....m * 12345....m * .. * .. * .. n times * 1234.....m * */ n = a.length; m = a[0].length; int nextToPrinRow = m; int nextToPrinCol = n; int row=0, col = 0; int k = 0; int turn=0; int turnTemp=0; int rt=0,rb=n-1,cl=0,cr=m-1; for (int i = 0; i < m * n; i++) { if(turn==0){ if (k<=cr) { row=rt; col=k; k++; if(k>cr){ turnTemp=1; rt++; k=rt; } } } if(turn==1){ if (k<=rb) { row=k; col=cr; k++; if(k>rb){ turnTemp=2; cr--; k=cr; } } } if(turn==2){ if (k>=cl) { row=rb; col=k; k--; if(k<cl){ turnTemp=3; rb--; k=rb; } } } if(turn==3){ if (k>=rt) { row=k; col=cl; k--; if(k<rt){ turnTemp=0; cl++; k=cl; } } } System.out.print(a[row][col]+" "); turn=turnTemp; } }
comment by hckr85 on 2009-10-30 13:49:17
 



Enter the string above
 
Thumbnails by Thumbshots.com