c# 整数除法取整_Leetcode 整数反转

Leetcode 整数反转

题目描述

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

示例 1:

输入: 123 输出: 321示例 2:

输入: -123 输出: -321

示例 3:

输入: 120 输出: 21注意:

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-integer

题解

题解分析

看到整数排序,我们自然想到两种解法:

  • 将数字转换为字符串,然后利用字符串的方法进行重新排序45ad08d18276b16e3fe543146a58d796.png

    本来不是特别想把这种写法写出来,但是发现这种想法在Leetcode上点赞还挺高呢 ~。~,你瞅瞅:df840bf5b565fe8d3a0b3fab81bdf375.png

    所以就写出来啦。

    但是,这种写法效率是非常低的,后面会将两种算法的执行效率进行一个对比,大家可以参考一下。

  • 利用整数的除法对现有数据进行重排序

5740f4e7772d6b7021f3afc05ab6a53b.png

这种解法是Leetcode里面使用比较多的一种,简单分析一下这种写法:

  1. 通过while循环来判断x是否被除尽

  2. 对输入的参数进行出栈,将结果保存到pop里面,这里采用的是取余的方法。

    在Java里面的除法有两种:

    2.1 一种是取整,是使用“/”,最后的结果会保存整数部分,举个栗子:123/10,最后显示的结果是12

    2.2 另一种是取余,是使用“%”。,最后的结果会保存没有被除完的部分,举个栗子:123%10,最后显示的结果是3

  3. 将输入的参数进行去尾,也就是将123中的3从最后一位去掉

  4. 对拼装后的结果进行验证,确保没有大于整数的最大值,并没有小于整数的最小值。这里以大于最大值说明:

    1. rev>Integer.MAX_VALUE/10 如果拼装的结果大于整数最大的前10位,那么结果必大于整数最大值
    2. rev == Integer.MAX_VALUE / 10 && pop > Integer.MAX_VALUE % 10 或者rev结果和整数最大值相等,但是余数大于整数最大值的最末尾
  5. 最返回结果进行入栈操作,和之前出栈相反

两种算法对比

算法执行耗时内存消耗
算法14 ms,击败了16.91% 的Java用户37.2 MB,击败了5.33% 的Java用户
算法21 ms,击败了100.00% 的Java用户37.1 MB,击败了5.33% 的Java用户

总结

通过两种算法的编写,真真切切的感觉到有了算法,能对系统的执行效率得到很大的提高,用数据打脸了一波算法无用论的编程工作者(包括本菜狗?),看来以后要把算法列入必学的内容之一了,不然要被diss到死啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值