diff --git a/LeetcodeProblems/Algorithms/Reverse_Integer.js b/LeetcodeProblems/Algorithms/Reverse_Integer.js new file mode 100644 index 0000000..058506e --- /dev/null +++ b/LeetcodeProblems/Algorithms/Reverse_Integer.js @@ -0,0 +1,46 @@ +/** +Reverse Integer +https://leetcode.com/problems/reverse-integer/ + +Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0. + +Assume the environment does not allow you to store 64-bit integers (signed or unsigned). + +Example 1: +Input: x = 123 +Output: 321 + +Example 2: +Input: x = -123 +Output: -321 + +Example 3: +Input: x = 120 +Output: 21 + + */ + +/** + * @param {number} x + * @return {number} + */ +var reverseInteger = function(x) { + const sign = x >= 0 ? 1 : -1; + + let baseNum = sign * x; + let builder = 0; + + while (baseNum > 0) { + const digit = baseNum % 10; + builder = builder * 10 + digit; + baseNum = (baseNum / 10) | 0; + } + + builder *= sign; + + const isWithinRange = (builder >= -Math.pow(2, 31) && builder <= Math.pow(2, 31) - 1); + + return isWithinRange ? builder : 0; +}; + +module.exports.reverseInteger = reverseInteger; \ No newline at end of file diff --git a/LeetcodeProblemsTests/Algorithms/Reverse_Integer_Test.js b/LeetcodeProblemsTests/Algorithms/Reverse_Integer_Test.js new file mode 100644 index 0000000..a599cf3 --- /dev/null +++ b/LeetcodeProblemsTests/Algorithms/Reverse_Integer_Test.js @@ -0,0 +1,11 @@ +const assert = require('assert'); +const reverseInteger = require('../../LeetcodeProblems/Algorithms/Reverse_Integer').reverseInteger; + +var test = function() { + assert.equal(reverseInteger(123), 321); + assert.equal(reverseInteger(-123), -321); + assert.equal(reverseInteger(120), 21); +} + + +module.exports.test = test; diff --git a/README.md b/README.md index a46600f..a692b06 100644 --- a/README.md +++ b/README.md @@ -62,8 +62,9 @@ To run a specific problem in your console run `node ` (e.g. | [Construct Binary Tree from Preorder and Inorder Traversal ](/LeetcodeProblems/Algorithms/Construct_Binary_Tree_from_Preorder_and_Inorder_Traversal.js) | Medium | https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ | | [Lowest Common Ancestor of a Binary Tree ](/LeetcodeProblems/Algorithms/Lowest_Common_Ancestor_of_a_Binary_Tree.js) | Medium | https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ | | [Maximum Sum of an Hourglass](/LeetcodeProblems/Algorithms/Maximise_Hour_Glass_Sum.js) | Medium | https://leetcode.com/problems/maximum-sum-of-an-hourglass/ | -| [Time Needed to Rearrange a Binary String](/LeetcodeProblems/Algorithms/Time_Needed_Rearrange_Binary_String.js)| Medium | https://leetcode.com/problems/time-needed-to-rearrange-a-binary-string/ | -| [Find Subarrays With Equal Sum ](/LeetcodeProblems/Algorithms/Find_Subarrays_With_Equal_Sums.js) | Medium | https://leetcode.com/problems/find-subarrays-with-equal-sum/ | +| [Reverse Integer](/LeetcodeProblems/Algorithms/Reverse_Integer.js) | Medium | https://leetcode.com/problems/reverse-integer/ | +| [Time Needed to Rearrange a Binary String](/LeetcodeProblems/Algorithms/Time_Needed_Rearrange_Binary_String.js) | Medium | https://leetcode.com/problems/time-needed-to-rearrange-a-binary-string/ | +| [Find Subarrays With Equal Sum ](/LeetcodeProblems/Algorithms/Find_Subarrays_With_Equal_Sums.js) | Medium | https://leetcode.com/problems/find-subarrays-with-equal-sum/ | | [Flood Fill ](/LeetcodeProblems/Algorithms/Flood_Fill.js) | Easy | https://leetcode.com/problems/flood-fill/ | | [Implement stack using queues ](/LeetcodeProblems/Algorithms/Implement_stack_using_queues.js) | Easy | https://leetcode.com/problems/implement-stack-using-queues/ | | [Number of Segments in a String ](/LeetcodeProblems/Algorithms/Number_of_Segments_in_a_String.js) | Easy | https://leetcode.com/problems/number-of-segments-in-a-string/ |