Saturday, May 14, 2011

How to find if a number is a Palindrome?

Read the question. Listen very carefully to the question. Each word may have a meaning. In my experience, I have seen many interviewees just hear the last word: palindrome. Then I start getting solutions and examples of palindrome words. But note the question: It says a number. String operations are way more costly than number crunching.

Let's now dive into some possible solutions for this problem.

publicstaticbool IsPalindrome(long number)
{
bool isPalin = true;
// inefficient solution - convert number to stringstring numAsStr = number.ToString();
// more inefficiency - looping through the entire string// could have achieved the same by traversing just half the stringfor (int i = 0, j = numAsStr.Length - 1; i < numAsStr.Length - 1; i++, j--)
{
if (numAsStr[i] != numAsStr[j])
{
// the corresponding locations do not match
isPalin = false;
// some people forget to break out of the loop// extremely bad - no need to do any further comparisonsbreak;
}
}
return isPalin;
}

The above solution was an in-efficient solution. It works, but does not get you any points. So, now let's see what improvements can be made to the above program.

publicstaticbool IsPalindrome2(long number)
{
bool isPalin = true;
// inefficient solution - convert number to stringstring numAsStr = number.ToString();
// we can find if a string is palindrome or not by just traversing half the stringfor (int i = 0, j = numAsStr.Length - 1; i < (numAsStr.Length) / 2; i++, j--)
{
if (numAsStr[i] != numAsStr[j])
{
// the corresponding locations do not match
isPalin = false;
// some people forget to break out of the loop// extremely bad - no need to do any further comparisonsbreak;
}
}
return isPalin;
}

In the above solution, we cut our execution time by almost half. Better, but not good enough. At this point, the interviewer should have a pretty good idea of your skills on reviewing code and making changes to improve it. Let's assume that he still wants you to keep digging.

publicstaticbool IsPalindrome3(long number)
{
// since the input is a number, one very fast way way would be // to reverse the number and compare to originallong revNum = ReverseNumber(number);
return (number == revNum);
}
privatestaticlong ReverseNumber(long number)
{
long retVal = 0;
do
{
// get the last digit by using the modulo (remainder) operator
retVal = (retVal * 10) + (number % 10);
// drop the last digit from the number
number = number / 10;
}
while (number != 0);
return retVal;
}

If you run some performance tests with larges number sets on the above solutions, you will find that the 3rd solution is the most performant. I hope this example has shown you one way to attempt to solve a coding question. Remember, it is not just about the answer. The interviewer is trying to find your ability to think, debug and troubleshoot a problem.

I tried the second example you gave in your post above which traverse only half the string. But i think its wrong. because when the user enters a number such as "4254", the variable "isPalin" is considered true, and the for loop breaks out after the firs iteration as numtoStr[0] = 4 and numtoStr[3]=4

Imad,The loop will execute 2 times as length/2 is 4/2 = 2 and the counter starts at 0. So, in two iterations, the string will be reversed. I would strongly recommend that you type this code in a program and execute it step by step.

Here is the algo to check number is palindrome or not 1. Reverse the digits of inputNumber, and store it in another integer variable(Let's call it reverseNumber).2. Compare inputNumber and reverseNumber.http://www.techcrashcourse.com/2014/10/c-program-check-palindrome-number.html

Welcome and welcome to our valued customers, God protect you from all evil, we all know the importance of swimming pools in our lives because of the benefits of many and then we must take care of swimming pools and attention to clean up to keep us healthy from all infections and bacteria All you have to do is contact and communicate with the best cleaning compan swimming pools in Riyadh Our company Zain offers many of the best cleaning and protection means as the company possesses the trained and skilled workers trained on the latest machinery