乐趣区

leetcode-Easy-第2期:Reverse Interger

题目
Given a 32-bit signed integer, reverse digits of an integer.
反转整数反转后的整数如果不在 [−2^31, 2^31 − 1] 范围则返回 0
Example1
Input: 123
Output: 321
Example2
Input: -123
Output: -321
Example3
Input: 120
Output: 21
简单解法
耗时:100ms
var reverse = function(x) {
const max = Math.pow(2,31) -1
const min = -1 * Math.pow(2,31)

let arr = String(x).split(”).reverse();
const len = arr.length – 1;
if(arr[0] === 0){
arr = arr.splice(0,1)
}
if(arr[len] === ‘-‘){
arr.splice(len,1)
arr.unshift(‘-‘)
}
const reverseX = Number(arr.join(”))
if(reverseX > max || reverseX < min) return 0
return reverseX
};
解法二:
var reverse = function(x) {
const MAX = Math.pow(2,31) – 1
const MIN = -1 * Math.pow(2,31)

let res = 0;
while (x !== 0) {
// 获取余数,即从右边第一位开始的数字
res = res * 10 + (x % 10);
// 保留整数部分
x = Math.trunc(x / 10);
}
return (res > MAX || res < MIN) ? 0 : res;

};
解题思路:
234
1: res = 4,x = 23
2: res = 4*10 + (23%10) = 40 + 3 = 43,
x: Math.trunc(23/10) = 2
3: res = 43*10 + (2%10) = 430 + 2 = 432
x = Math.trunc(2/10) = 0

跳出 while 循环,判断 res 是否在最大值和最小值之间
知识点复习
Math.floor(x) // 小于 x 的最大整数
Math.floor(-123/10) // -13

Math.floor(x) // 返回四舍五入
Math.round(-126/10) // -13

Math.trunc(x) // 返回 x 的整数部分,包含正负号
Math.trunc(-123/10) // -12

退出移动版