力扣第七题整数反转

题目概述

  • 题目:第七题
  • 难度:简单
  • 内容:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1:

    输入: 123 输出: 321

    示例 2:

    输入: -123 输出: -321

    示例 3:

    输入: 120 输出: 21

    注意:

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

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

第一次思路

第一次只考虑了三位整数,没有思考整数的取值范围问题。

Code

class Solution {
public:
    int reverse(int x) {
    int bai;
    int shi;
    int ge,y;
    bai = x/100;
    shi = x/10%10;
    ge = x%10;
    y=ge*100+shi*10+bai;
    if(x<0)
    {
        return y=-y;
    }
        return y;
    }  
};

测试 Submit

测试结果只能满足三位整数,其他情况均不满足

分析

题目有两个注意点 :

  1. 32 位的有符号整数,值得是范围从负 2,147,483,648(用 Int_MIN 常数表示)到正 2,147,483,647 (用 Int_MAx 常数表示)的值,不只是三位整数
  2. 反转的方式

改进

  1. 在-9到9的数,可以直接输出

  2. 溢出的数字,返回0;

  3. 中间部分使用while循环来解决。

    ①. 定义一个新的长整形来存放反转后的数

    ②. 对x进行取余运算,然后将结构传递给y。比如:321,对10取余为1,将1传递给y,x对10取整,为32;在第二次循环中,将y*10,等于10,然后重复操作,y=12,x=3,y=123,x=0,然后退出循环

改进Code

class Solution {
public:
    int reverse(int x) {
        long y=0;
        if(x>-9&&x<9){
            return x;
        }
        
        
        else{
            while(x){
                y=y*10;
                 if(y<=INT_MIN||y>=INT_MAX)
                return 0;//溢出
                y=y+x%10;
                x=x/10;
                
            }
            return y;
        }
    }
};


改进Submit

img_@~L5.png)

收获总结

题目比较简单,但是有细节需要考虑,比如溢出问题,还有代码简化问题。

猜你喜欢

转载自www.cnblogs.com/HanLongfeng/p/11874116.html