将给出的整数x翻转_LeetCode算法.7整数反转

这篇博客主要解析了LeetCode中的整数翻转问题。作者首先介绍了通过将数字转换为字符串并反转的简单思路,然后详细阐述了一种更数学化的解决方案:通过连续除以10取余数来获取数字的每一位,并逆序组合成新的数字。这种方法展示了数字在10进制系统中的拆分和重组过程。
摘要由CSDN通过智能技术生成

6ed9a9be1f2efd4a2490e935d6f5eba4.png

题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解题

这题我的初始想法是把数字转成字符串,然后反转再转回数字。因为平时使用的是 javascript,数字和字符串经常相互转换。当然这个想法是可行的,代码如下:

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    let result = 0;
    let numberStrArray = x.toString().split('');
    let flag = '';
    if ( numberStrArray[0]==='-') {
        numberStrArray.shift();
        flag = '-'
    }
    numberStrArray = numberStrArray.reverse();
    let numberStr = flag + numberStrArray.join('');
    result = parseInt(numberStr)
    if (
        result > 2147483647 ||
        result < -2147483648
    ) {
       return 0; 
    } else {
        return result;
    }
};

但是从数学的角度更纯粹些:先把原数字的每一位入栈,如何取到每一位看如下例子: 123456 123456 除 10 取余 = 6

123456 整除 10 = 12345

12345 除 10 取余 = 5

12345 整除 10 = 1234

1234 除 10 取余 = 4

1234 整除 10 = 123

123 除 10 取余 = 3

123 整除 10 = 12

12 除 10 取余 = 2

12 整除 10 = 1

1 除 10 取余 = 1

1 整除 10 = 0

余数就是每一位的数字,如何把他们变成一个新数字,看如下例子:

6 x 10 + 5 = 65

65 x 10 + 4 = 654

654 x 10 + 3 = 6543

6543 x 10 + 2 = 65432

65432 x 10 + 1 = 654321

其实10进制数通过拿数字对10的操作就可以完成数的拆分和组装。最终解题代码如下:

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function (x) {
  let result = 0;
  let bdwnr; // be divided with no remainder
  if (x >= 0) {
    bdwnr = function (a, b) {
      return Math.floor(a / b);
    }
  } else {
    bdwnr = function (a, b) {
      return Math.ceil(a / b);
    }
  }
  while (x !== 0) {
    let pop = x % 10;
    x = bdwnr(x, 10);
    if (
      result > 2147483647 ||
      result < -2147483648
    ) {
      return 0;
    } else {
      result = result * 10 + pop;
    }
  }
  if (
    result > 2147483647 ||
    result < -2147483648
  ) {
    return 0;
  } else {
    return result;
  }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值