Table of Contents
The Reverse Integer problem is a programming challenge that asks you to reverse the digits of a given integer. For example, if you’re given the number 123, you should return the number 321.
Now, it’s important to note that there are a few rules to keep in mind while solving this problem. For one, you need to make sure that your solution can handle negative integers. So, if you’re given the number -123, your solution should return -321.
Another thing to keep in mind is that your solution shouldn’t include any leading zeros. That means that if you’re given the number 120, your solution should return the number 21 (not 021).
Finally, it’s worth noting that this problem can be solved using a variety of programming languages, and there are many different approaches you can take to arrive at the correct solution. Some possible strategies include using string manipulation, iteration, or recursion.
Solutions for Reverse Integer
Solution 1: Using string manipulation
One approach to solving this problem is to convert the integer to a string, reverse the string, and then convert the reversed string back to an integer. Here’s the pseudocode:
function reverseInteger(num):
// convert the integer to a string
strNum = convertToString(num)
// reverse the string
reversedStrNum = reverseString(strNum)
// convert the reversed string back to an integer
reversedNum = convertToInteger(reversedStrNum)
return reversedNum
Let’s break down each step in this solution:
- First, we convert the given integer
num
to a string using theconvertToString
function. - Next, we reverse the string using the
reverseString
function. - Finally, we convert the reversed string back to an integer using the
convertToInteger
function and return the result.
Here’s an example implementation of this solution in Python:
def reverseInteger(num):
strNum = str(num)
reversedStrNum = strNum[::-1]
reversedNum = int(reversedStrNum)
return reversedNum
Time Complexity: O(n), where n is the number of digits in the input integer. This is because the solution involves converting the integer to a string, reversing the string, and then converting it back to an integer, each of which takes O(n) time.
Space Complexity: O(n), where n is the number of digits in the input integer. This is because the solution requires creating a string of length n to hold the reversed integer.
Code Complexity: This solution is relatively simple and straightforward, as it only involves a few string manipulation operations.
Solution 2: Using iteration
Another approach to solving this problem is to use iteration to extract the digits of the given integer one by one and append them in reverse order to a new integer. Here’s the pseudocode:
function reverseInteger(num):
// initialize the reversed integer to zero
reversedNum = 0
// iterate through the digits of the input integer
while num != 0:
// extract the last digit of the input integer
digit = num % 10
// append the digit to the reversed integer
reversedNum = (reversedNum * 10) + digit
// remove the last digit from the input integer
num = num // 10
return reversedNum
Let’s break down each step in this solution:
- First, we initialize a new variable
reversedNum
to zero, which will eventually hold the reversed integer. - Next, we use a while loop to iterate through the digits of the input integer
num
. - Inside the loop, we extract the last digit of
num
using the modulo operator%
, and append it toreversedNum
by multiplying it by 10 and adding it to the current value ofreversedNum
. - We then remove the last digit from
num
using integer division//
, which effectively shifts the decimal point one place to the left. - We repeat this process until
num
becomes zero, at which point we returnreversedNum
.
Here’s an example implementation of this solution in Python:
def reverseInteger(num):
reversedNum = 0
while num != 0:
digit = num % 10
reversedNum = (reversedNum * 10) + digit
num = num // 10
return reversedNum
Time Complexity: O(n), where n is the number of digits in the input integer. This is because the solution involves iterating through each digit of the input integer, which takes O(n) time.
Space Complexity: O(1), because the solution only requires a constant amount of space to hold the reversedNum
variable.
Code Complexity: This solution is slightly more complex than the previous solution, as it involves a while loop and some arithmetic operations. However, it’s still relatively straightforward.
Solution 3: Using recursion
A third approach to solving this problem is to use recursion to reverse the integer. We can use the fact that we can get the last digit of the integer by taking the remainder when dividing by 10, and that we can remove the last digit by dividing by 10. Here’s the pseudocode:
function reverseInteger(num):
// base case: return num if it's a single digit
if num < 10 and num > -10:
return num
// recursive case: reverse the digits of the remaining integer
// and append the last digit
Time Complexity: O(n), where n is the number of digits in the input integer. This is because the solution involves recursively calling the function once for each digit in the input integer, which takes O(n) time.
Space Complexity: O(n), because the solution requires creating n stack frames for the recursive calls.
Code Complexity: This solution is the most complex of the three, as it involves recursion and a bit more logic to extract the last digit and remove it from the integer.
String Manipulation vs Iterative vs Recursive: Which one is better?
In terms of time complexity, all three solutions have the same worst-case time complexity of O(n). However, the second solution has the best space complexity, while the first and third solutions both have O(n) space complexity. In terms of code complexity, the first solution is the simplest, followed by the second and then the third.
I would say that the second solution using iteration is the most efficient and simplest solution, as it has O(n) time complexity, O(1) space complexity, and relatively simple code. However, the choice of solution may depend on other factors, such as the programming language being used or the specific requirements of the problem.
Reverse Integer in Java:
public int reverse(int x) {
int reversedNum = 0;
while (x != 0) {
int digit = x % 10;
reversedNum = (reversedNum * 10) + digit;
x /= 10;
}
return reversedNum;
}
This solution is very similar to the pseudocode I provided earlier. We initialize a variable reversedNum
to zero, and then use a while loop to extract each digit of the input integer x
and append it to reversedNum
. To extract the digit, we use the modulo operator %
, and to remove the digit, we use integer division /=
. Finally, we return reversedNum
.
Reverse Integer in JavaScript:
function reverse(x) {
let reversedNum = 0;
while (x !== 0) {
let digit = x % 10;
reversedNum = (reversedNum * 10) + digit;
x = Math.trunc(x / 10);
}
return reversedNum;
}
This solution is very similar to the Java solution, with a few differences. We use the let
keyword to declare variables instead of int
. We also use the !==
operator to compare x
to zero, and we use the Math.trunc
function to remove the decimal part of the result of dividing x
by 10.
Reverse Integer in Ruby:
def reverse(x)
reversed_num = 0
while x != 0
digit = x % 10
reversed_num = (reversed_num * 10) + digit
x /= 10
end
return reversed_num
end
This solution is very similar to the Java solution as well. We use the def
keyword to define a function, and we use while
and end
to define the loop. We use x /= 10
to remove the digit, and we return reversed_num
.
Reverse Integer in Python:
def reverse(x):
reversedNum = 0
while x != 0:
digit = x % 10
reversedNum = (reversedNum * 10) + digit
x //= 10
return reversedNum
This solution is almost identical to the Java solution, with a few small differences. We use def
to define the function, and we use //=
instead of /=
to remove the digit. We also use return
instead of reversedNum
at the end.
Leave a Reply