A palindrome number is a number that remains the same when digits are reversed.
For example, the number 12321 is a palindrome number, but 1451 is not a palindrome number.
Problem Statement
Given a positive integer, the task is to check whether the number is palindrome or not.
Example:
- Input: 1221
- Output: True
- Input: 146541
- Output: False
- Input: 5
- Output: True
The idea is to make a number with all the digits of the given number present in reverse order and check if both numbers are equal. Follow the below steps to solve the problem.
- First, Declare a variable reverseNum and initialize it with 0.
- Now, make a while loop till the original number is greater than zero.
- In every loop get the last digit of the number and add that digit at the end of the reverseNum and then, divide the original number by 10.
reverseNum = reverseNum * 10 + (number % 10)
- Lastly, check if the original number and reverseNum number are equal or not.
Dry run of the above approach
- Orginal = 1221
- reverseNum = 0
- tempOrginal = 1221
Iteration 1 | lastDigit = 1 reverseNum = 0 * 10 + 1 = 1 tempOriginal = 122 |
Iteration 2 | lastDigit = 2 reverseNum = 1 * 10 + 2 = 12 tempOriginal = 12 |
Iteration 3 | lastDigit = 2 reverseNum = 12 * 10 + 2 = 122 tempOriginal = 1 |
Iteration 4 | lastDigit = 1 reverseNum = 122 * 10 + 1 = 1221 tempOriginal = 0 |
reverseNum = original
Implementation
C/C++ Implementation
bool checkPalindrome(int original) { int reverseNum = 0; int tempOriginal = original; while (tempOriginal > 0) { int lastDigit = tempOriginal % 10; reverseNum = reverseNum * 10 + lastDigit; tempOriginal = tempOriginal / 10; } if (original == reverseNum) { return true; } else { return false; } }
Java Implementation
public int checkPalindrome(int original) { int reverseNum = 0; int tempOriginal = original; while (tempOriginal > 0) { int lastDigit = tempOriginal % 10; reverseNum = reverseNum * 10 + lastDigit; tempOriginal = tempOriginal / 10; } if (original == reverseNum) { return 1; } else { return 0; } }
Python Implementation
def checkPalindrome(original): reverseNum = 0 tempOriginal = original while (tempOriginal > 0): lastDigit = tempOriginal % 10 reverseNum = reverseNum * 10 + lastDigit tempOriginal = tempOriginal / 10 if (original == reverseNum): return 1 else: return 0
- Time complexity: O(log10(N)), Where N is the given number.
- Space complexity: O(1)
Special Case
The above solution will only work if the number is less than 1018, but what would happen if the number is greater than 1018?
Implementation
C Implementation of Special Case
bool checkPalindrome(char original[]) { int n = sizeof(original) / sizeof(original[0]); for (int i = 0; i < n / 2; i++) { if (original[i] != original[n - 1 - i]) { return false; } } return true; }
C++ Implementation of Special Case
bool checkPalindrome(string original) { int n = original.size(); for (int i = 0; i < n / 2; i++) { if (original[i] != original[n - 1 - i]) { return false; } } return true; }
Java Implementation of Special Case
public boolean checkPalindrome(String original) { int n = original.length(); for (int i = 0; i < n / 2; i++) { if (original.charAt(i) != original.charAt(n - 1 - i)) { return false; } } return true; }
Python Implementation of Special Case
def checkPalindrome(original): n = len(original) for i in range(0, n//2): if original[i] != original[n - i - 1]: return False return True
- Time complexity: O(L), Where L is the length of the given string.
- Space complexity: O(1)
Practice Question
Frequently Asked Questions
Q.1: Can a negative number be palindrome?
Ans: No, negative numbers can not be palindromes.
Q.2: Can we solve this problem without converting an integer to a string?
Ans: Yes but only for integers less than 1018.
Q.3: Are all single-digit numbers palindrome?
Ans: Yes
Q.4: How is the time complexity of the above algorithm O(log10(N))?
Ans: Because we are dividing the input number N by 10 in every iteration. So, there is going to be a total of log10(N) iterations.