zoukankan      html  css  js  c++  java
  • LeetCode刷题记录_反转整数

    题目

    给定一个 32 位有符号整数,将整数中的数字进行反转。

    示例 1:

    输入: 123
    输出: 321
    

     示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

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

    解法:难点在于如何判断是否溢出(前提是题目中的加粗下划线,我以为题目的意思是只能用int来解题,如果可以用long,double那题目自然简单好多,解完题目发现大家都用了long和double,我真是。。。。。)在不考虑溢出的情况下解题很简单这样就可以

    class Solution {
        public int reverse(int x) {
            int r=0;
            int temp;
            temp = x;
           
            while(temp/10!=0||temp%10!=0){
                r=r*10+temp%10;
                temp /=10; 
            }
            return r;  
        }
    }
    

     如果有溢出则需要判断溢出,不溢出的情况下,循环中的r,正数必然是递增的,负数递减的

    class Solution {
        public int reverse(int x) {
            int r=0;
            int temp;
            temp = x;
            if(x>0){
                while(temp/10!=0||temp%10!=0){
                if(r>(r=r*10+temp%10)/10) return 0;
                //正数出现递减
                temp /=10; 
            }
                return r;
            }
            else{
                while(temp/10!=0||temp%10!=0){            
                if(r<(r=r*10+temp%10)/10) return 0; 
                //负数出现递增
                temp /=10; 
            }
                return r;
            }
        }
    }
    

     看到别人的解法发现一个很好的把负数转为正数的方法,设定一个符号之int sign=1;若x<0则sign=-1;x=-1*x; 最后return -1*r;写出来更简洁。感觉自己还是蠢了,有一点一直没想明白,存不存在这种数,*10之后溢出了,但是溢出后的值比之前大?简单粗暴的用0:Integer.MAX_VALUE遍历了一下,并没有发现。

  • 相关阅读:
    Chrome下载无后缀问题
    duilib程序HelloWorld
    go的windows下的安装包
    ASP.NET MVC异步上传图片和富文本编辑器的使用详解
    搭建go环境(windows和linux)
    构建离线Go编程指南——gotour
    判定模块加载时是否存在循环依赖
    Winform开发框架之框架演化
    为什么要写技术博
    JTREE使用例子—创建一个客户端界面
  • 原文地址:https://www.cnblogs.com/annofyf/p/9381745.html
Copyright © 2011-2022 走看看