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
    原文作者:养基赚钱
    原文地址: https://segmentfault.com/a/1190000018578125
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞