|
interview_questions
|
|
|
|
|
Bookmarks
|
|
|
|
|
|
|
|
|
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
|
|
|