专栏首页江涛的博客leetcode - 整数反转

leetcode - 整数反转

题意

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

注意:

  • 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

示例

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

  • -2^31 <= x <= 2^31 - 1

出处

链接:https://leetcode-cn.com/problems/reverse-integer

思路

这题假如是个小学一年级的期末考试题,我们大概会这么做,从右边往左边读然后依次写下来,如果读到最后一个是“-”减号,我们就把它放到写下数字的最前面。言下之意就是,我不要把它看成数字处理,我把它看成字符串,然后一翻转。这里考虑下带不带负号,假设带上吧,那你就要考虑最后那位是不是“-”了,如果不带吧,那你就要判断它原值是正数还是负数了。

这里需要注意的是在 Javascript 语言中,Number 类型的范围是[-2^53 - 1, 2^53 - 1],所以如果你转换成字符串处理,你是感受不到溢出的,需要去人肉判断一波,该值是否在题意给定的[−2^31, 2^31 − 1]区间。除此之外,Javascript 的字符串中并没有字符串反转的 API,但是有数组反转的 API,所以曲线救国,就先转成字符串然后转成数组反转再转回字符串。这个是完全根据 Javascript 语言特性和小学生思维的解法写的。

当然啦,你也可以按照数字去解题,如果原值不为 0,将原值对于 10 取其余数塞到新组成的字符串的后面,新的原值等于原值整除 10, 前提你还是要先判断有没有溢出,然后该值的正负性。然后如果该值不为 0,要去掉开头的 0, 如示例 3 所示.

代码

/**
 * @param {number} x
 * @return {number}
 */
const reverse = function(x) {
    const str = Math.abs(x).toString();
    const str_reverse = str.split('').reverse().join('');
    return x >= 0 ? Number(str_reverse) > Math.pow(2, 31) - 1 ? 0 : Number(str_reverse) : -Number(str_reverse) < Math.pow(-2, 31) ? 0 : -Number(str_reverse);
};

export default reverse;

测试

import twoSum from '../../code/leetcode/7';

describe('test function reverse:', () => {

    test('test case x = 123', () => {
        const res = twoSum(123);
        expect(res).toBe(321);
    });

    test('test case x = -123', () => {
        const res = twoSum(-123);
        expect(res).toBe(-321);
    });

    test('test case x = 120', () => {
        const res = twoSum(120);
        expect(res).toBe(21);
    });

    test('test case x = 0', () => {
        const res = twoSum(0);
        expect(res).toBe(0);
    });

    test('test case x = 1534236469', () => {
        const res = twoSum(1534236469);
        expect(res).toBe(0);
    });
})

思考

  • 就上面提到的用数字取余数的解法,有兴趣的同学可以去试下
  • 题目中给出的区间具体值是多大2^31-1=2147483647,-2^31=-2147483648

参考

JS 的 Number 类型:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number

说明

本文首发于 GitHub 仓库https://github.com/ataola/coding,线上阅读地址:https://zhengjiangtao.cn/coding/,转载请注明出处,谢谢!

本文分享自微信公众号 - 前端路桥(ataola),作者:丰臣正一

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-01-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LeetCode - 整数反转

    原题地址:https://leetcode-cn.com/problems/reverse-integer/

    晓痴
  • 【LeetCode】整数反转

    Jacob丶
  • LeetCode:整数反转【 Java 】

    圆号本昊
  • 【一天一道Leetcode】整数反转

    潘永斌
  • LeetCode-7 整数反转

    今天我们学习第7题整数反转,这是个简单的数学题。下面我们看看这道题的题目描述。

    用户3470542
  • LeetCode 7. 整数反转

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    freesan44
  • leetcode 7. 整数反转

    1、将12345 % 10 得到5,之后将12345 / 10 2、将1234 % 10 得到4,再将1234 / 10 3、将123 % 10 得到3...

    大忽悠爱学习
  • leetcode(7)整数反转

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    suveng
  • Leetcode|7. 整数反转

    SL_World
  • Leetcode PHP 整数反转

    注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    Meng小羽
  • 【刷穿 LeetCode】7. 整数反转

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    宫水三叶的刷题日记
  • Leetcode No.7 整数反转

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31,  2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    week
  • 【转载 leetcode算法-整数反转】

    我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。

    用户5640963
  • LeetCode-7.整数反转 取模反转法与字符串法

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 −2^31, 2^31 − 1。请根据这个假设,如果反转后整数溢出那么就返回 0。

    BA_NANA
  • LeetCode - #7 反转整数

    我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤道长[1])的 Swift 算法题题解整理为文字版以...

    Swift社区
  • LeetCode-7. Reverse Integer | 整数反转

    Given a signed 32-bit integer x, return x with its digits reversed. If reversing...

    Zoctopus
  • LeetCode(7-整数反转&&8-字符串转换整数 (atoi)&&9-回文数)

    如果觉得UP写的不错的话,可以点击上方蓝字关注哦,后续会持续更新LeetCode题解.

    萌萌哒的瓤瓤
  • leetcode 7 | 反转整数(简单题)

    假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

    ACM算法日常
  • LeetCode刷题DAY 12:整数反转

    给出一个 32 位的有符号整数,将这个整数中每位上的数字进行反转并输出。如:输入120返回21,输入-12返回-21。这里仅考虑32位有符号整数,如反转后数字不...

    三猫

扫码关注云+社区

领取腾讯云代金券