Amazon Interview Question
Software Engineer / Developers{{void printSpiral(int row,int col,int m,int n){
if (row>m && col>n) return;
if (m==n && row==m) System.out.print(arr[row][col]);
int i,j;
for(i=row,j=col;j<n;j++) System.out.print(arr[i][j] + " ");
for(i=row,j=n ;i<m;i++) System.out.print(arr[i][j] + " ");
for(i=m,j=n ;j>col;j--) System.out.print(arr[i][j] + " ");
for(i=m,j=col;i>row;i--) System.out.print(arr[i][j] + " ");
print(row+1,col+1,m-1,n-1,arr);
return;}}}
void printSpiral(int row,int col,int m,int n){
if (row>m && col>n) return;
if (m==n && row==m) System.out.print(arr[row][col]);
int i,j;
for(i=row,j=col;j<n;j++) System.out.print(arr[i][j] + " ");
for(i=row,j=n ;i<m;i++) System.out.print(arr[i][j] + " ");
for(i=m,j=n ;j>col;j--) System.out.print(arr[i][j] + " ");
for(i=m,j=col;i>row;i--) System.out.print(arr[i][j] + " ");
print(row+1,col+1,m-1,n-1,arr);
return;
}
Have tested, this should work.... suppose this is matrix m*n m<=n
void MatrixSpiral( int matrix[][], int m, int n )
{
int layer = ceil((double)m/2 );
for (i = 0; i < layer; i++ )
{
// edge case, last loop
if (m%2 == 1 && i = layer-1 )
{
//loop1 top, left -> right
for (j = 0 + i ; j <= n-1-i; j++ )
cout << matrix[i][j];
return;
}
//loop1 top, left -> right
for (j = 0 + i ; j < n-1-i; j++ )
cout << matrix[i][j];
// loop2 right, top->bottom
for( j = 0 +i; j < m-1-i; j++ )
cout << matrix[j][n-1-i]
// loop3 bottom, right->left
for(j = n-1-i; j >i; j-- )
cout << matrix[m-1-i][j];
// loop4 left, bottom->top
for(j = m-1-i;j>i;j--)
cout << matrix[j][i];
}
}
<pre lang="" line="1" title="CodeMonkey65238" class="run-this">#include<stdio.h>
- Anonymous July 24, 2011int main()
{
int matrix[10][10];
int r,c;
printf("Enter rows and columns:");
scanf("%d%d",&r,&c);
int m=(r/2)+1;
int i=0;
while (i<=m)
{
int k=i;
int j=0;
for(;j<=c-2;j++)
printf("%d",matrix[k][j]);
for(;k<=r-2;k++)
printf("%d",matrix[k][j]);
for(;j>=i;j--)
printf("%d",matrix[k][j]);
for(;k>i;k--)
printf("%d",matrix[k][j]);
c--;
r--;
}
return 0;
}</pre><pre title="CodeMonkey65238" input="yes">
I think this might work.</pre>