package com.interview.number;
/**
* http://www.careercup.com/question?id=4857362737266688
* Test cases :
* 6 2 3 -> 6 7 8
* 1 2 3 -> 1 2 4
* 1,7,9 -> 1,8,9
* 1,8,9 -> 2,3,4
* 9,8,7 -> 1,2,3,4
* 2,6 -> 2,7
*/
public class SmallestNumberGreaterThanGiveNumberIncreasingSequence {
public int[] getNextInt(int []input){
int result[] = new int[input.length];
boolean flag = getNextInt(input,result,0);
if(flag){
return result;
}else{
result = new int[input.length+1];
fillRestOfArray(result, 0, (input[0] +1)%9);
return result;
}
}
private boolean getNextInt(int input[], int result[], int pos){
if(pos == input.length-1){
int higher = getHigherNumber(input[pos]+1,pos,input.length);
if(higher == -1){
return false;
}else{
result[pos] = input[pos]+1;
return true;
}
}
if(pos != 0 && input[pos] <= input[pos-1]){
int higher = getHigherNumber(input[pos-1] +1,pos,input.length);
if(higher == -1){
return false;
}else{
fillRestOfArray(result, pos, input[pos-1]+1);
return true;
}
}
if(input[pos] + (input.length - 1 -pos) <=9){
result[pos] = input[pos];
boolean flag = getNextInt(input,result,pos+1);
if(flag){
return true;
}
int higher = getHigherNumber(input[pos]+1,pos,input.length);
if(higher == -1){
return false;
}else{
fillRestOfArray(result,pos,input[pos]+1);
return true;
}
}else{
return false;
}
}
private void fillRestOfArray(int result[],int pos,int val){
for(int i=pos; i < result.length ; i++){
result[i] = val;
val++;
}
}
private int getHigherNumber(int input, int i, int len){
if(input + len - i-1 <=9){
return input;
}
return -1;
}
public static void main(String args[]){
int arr[] = {2,6};
SmallestNumberGreaterThanGiveNumberIncreasingSequence sm = new SmallestNumberGreaterThanGiveNumberIncreasingSequence();
int result[] = sm.getNextInt(arr);
for(int i : result){
System.out.print(i);
}
}
}