Problem Statement:
Given a number , find the next Palindrome.
Solution:
Concept:
Please refer to Source Code
This is one of the many ways of getting the next Palindrome number w.r.t a given number.
Any comment or suggestion for any kind of code optimization or any other better approach is most welcome.
Happy Coding !! :)
Given a number , find the next Palindrome.
Solution:
Concept:
- Convert number to String.
- Take base as 1, which will be used to get left and right pointers, in subsequent steps,
- Multiple Base by 10 at even iteration of loop till half the length of the string.
- Take right and left pointer pointing to left and right digits in the string.
- Add the difference of left and right to the number
- if right is greater left the number would become smaller, therefore increment the next digit to the left of right.
- If the number is even and left and right pointer points to adjacent digits, increment right pointer
Please refer to Source Code
/**
* Get next pallindrome
* @param num
* @return
*/
public static int nextPanlindrome(int num) {
if(isPalindrome(num)) //skip if number entered is pallindrome
num++;
String temp = num + "";
int end=temp.length() -1;
int base=1;
for(int start = 0; start < end; start++, end--)
{
// Gives the right digit
int right = Integer.parseInt(temp.charAt(end)+"") * base;
// Gives the left digit
int left = Integer.parseInt(temp.charAt(start)+"") * base;
// add differnce to the number
num = num + left - right ; //------(1)
base *=10;
if(right > left)
{
num += base; // for incresing the value of number which got decreased at (1)
// previous step indroduces asymmetry if its a even number.
if(start == end - 1) // For even numbers eg. case 8468 (adjacent digits)
num += base/10;
}
temp = num + "";
}
return num;
}
public static boolean isPalindrome(int num) {
int reverse = 0, temp=num;
while( temp != 0 ) {
reverse = reverse * 10;
reverse = reverse + temp%10;
temp = temp/10;
}
return (num == reverse ? true: false);
}
This is one of the many ways of getting the next Palindrome number w.r.t a given number.
Any comment or suggestion for any kind of code optimization or any other better approach is most welcome.
Happy Coding !! :)
No comments:
Post a Comment