package com.interview.number;
/**
http://www.geeksforgeeks.org/given-a-number-find-next-smallest-palindrome-larger-than-this-number/
*/
public class NextLargestPalindrome {
public void nextPalindrome(int num[]){
int mid = num.length/2;
int i = mid-1;
int j = num.length % 2 == 0 ? mid : mid+1;
while(i >= 0 && j <= num.length-1 && num[i] == num[j]){
i--;
j++;
}
boolean leftSmaller = false;
if(i < 0 || num[i] < num[j]){
leftSmaller = true;
}
if(!leftSmaller){
while(i >= 0){
num[j] = num[i];
i--;
j++;
}
}else{
int carry =0;
if(num.length % 2 != 0){
num[mid] = num[mid] + 1;
carry = num[mid]/10;
num[mid] = num[mid]%10;
j = mid+1;
}else{
j = mid;
carry = 1;
}
i = mid-1;
while(i >= 0){
num[i] = carry + num[i];
carry = num[i]/10;
num[i] = num[i]%10;
num[j] = num[i];
i--;
j++;
}
}
}
public void printArray(int num[]){
for(int i=0; i < num.length; i++){
System.out.print(num[i] + " ");
}
}
public static void main(String args[]){
NextLargestPalindrome nextLargestPalindrom = new NextLargestPalindrome();
int num[] = {6,5,4,4,5,6};
//handle case of 999 separately
nextLargestPalindrom.nextPalindrome(num);
nextLargestPalindrom.printArray(num);
}
}