整数反转

LeetCode第七题

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

示例 1:

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

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21
注意:

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

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

思路

采用除以10和取余操作,获取反转的数字。为了使程序过程更清晰,创建一个数组,用来存储反转数的每位数值。再循环乘以基的各次方累加,就得到了目标值。最后将得到的值与int型最大最小值比较,若溢出则将目标值置0。然后返回目标值即可。

源代码

int reverse(int x){
    int nums[11] = {0};      //32位有符号整数化为十进制不超过11位,此数组存储反转数的每位数值
    const int mod = 10;      //将模10定义为const类型
    int num = x;             //num为每次遍历剩下未处理的数
    int i = 0,j = 0;    
    double result = 0;       //结果值定义为double型,防止值溢出int型而报错
    while(num != 0){
        nums[i] = num % mod;
        num /= mod;
        ++i;
    }
    double sub = 1;          //以10为基,防止值溢出int型而报错
    if(i > 0){
        for(j = i - 1,sub = 1;j >= 0;--j,sub *= mod){
            result += nums[j] * sub;
        }
    }
    if(result > 2147483647 || result < (-2147483648)){
        result = 0;
    }
    return result;
}

分析

时间复杂度为线性级别,空间复杂度为常数级别。
然而数组的创建不是必须的,可以在while循环内部就将result累加起来。这样代码会更加简洁。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目地址:整数反转 1.题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 ...
    站在海边看远方阅读 634评论 0 0
  • 由于大学是文科专业,毕业后才转战前端,对算法方面可以算得上是一无所知,工作中很多时候也只是能解决问题,没有更多的考...
    Wood_yang阅读 2,113评论 0 0
  • 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123输出: 321...
    无名指666阅读 292评论 0 0
  • 7.整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123...
    跟着风行走阅读 442评论 0 1
  • 在泸沽湖畔,生长着两种花,一种开在岸上,一种长在水里,岸上的叫格桑花,水里的叫水性杨花。关于这两种花盛传着这样的故...
    耀珩阅读 601评论 0 0

友情链接更多精彩内容