svrussu
BAN USERHere is my little solution:
package other;
public class PrintSomeNumbers {
private static int[] array = null;
private static int number = -1;
private static int direction = 1;
public static void main(String[] args){
printThem(9);
}
public static void printThem(int n){
if(n < 1)
return;
if(n == 1){
System.out.println(1);
}
number = n;
int size = (n*2) - 1;
array = new int[size];
for(int i =0; i < array.length; i++){
array[i] = number;
}
int index = 0;
printThemRec(index);
}
public static void printThemRec(int ind){
int rightIndex = (array.length - 1) - ind;
int index = ind;
//Case when the left crosses right
//which is time to reverse.
if(index > rightIndex){
direction = -1;
}
//for going backwards
if(ind < 0)
return;
//current number to print
int curNum = number - index;
//print within the range
while(index <= rightIndex){
//System.out.println(curNum);
array[index] = curNum;
index++;
}
//omits the two extra printings before the middle one.
if(ind != number -1)
printIt();
printThemRec(ind+(1*direction));
}
private static void printIt(){
for(int i : array){
System.out.print("|"+i);
}
System.out.println("|");
}
}
...yes, but not really, this solution complexity is O(n-1) (at worst), but what they mean by <O(n) is something significantly smaller like O(log(n)).
- svrussu March 16, 2014