zoukankan      html  css  js  c++  java
  • Reverse Integer


    Reverse digits of an integer.

    Example1: x = 123, return 321
    Example2: x = -123, return -321

    此题看似简单,但有几种情况要注意:对于10这种数字的处理;对于溢出的处理。

    溢出不意味着ans_before<ans,溢出以后可能还是大于上次的数。

    解法一:采用x=reverse(reverse(x)) 的技巧判断是否溢出:

    public class Solution {//采用了reverse的reverse是数字本身的思想来防止溢出。特殊:0,10
        public int reverse(int x) {
            if(x==0)
            {
                return 0;
            }
            int temp=Math.abs(x);
            
            while(temp%10==0)
            {
                temp/=10;
            }
            if(temp!=reverse_num(reverse_num(temp)))
            {
                return 0;
            }
            if(x<0)
            {
                return -reverse_num(temp);
            }
            else return reverse_num(temp);
        }
        public int reverse_num(int x)
        {
            int ans=0;
            int temp=x;
            //boolean overflow=false;//溢出判定
            while(temp!=0)
            {
                ans=ans*10+(temp%10);
                temp/=10;
            }
            return ans;
        }
    }

    解法二:利用ans 和 Integer.MAX_VALUE/10 比较发现溢出。


    public class Solution {//采用了ans和MAX_VALUE/10进行比较发现溢出。
        public int reverse(int x) {
            int ans=0;
            int temp=x;
            while(temp!=0)
            {
                if(Math.abs(ans)>(Integer.MAX_VALUE/10))
                {
                    return 0;
                }
                ans=ans*10+(temp%10);
                temp/=10;
            }
            return ans;
        }
    
    
    }
    

    1. 负数和正数不用区别对待。

    2. -ans表示ans的负数。


  • 相关阅读:
    opencv学习之米粒分割 #201906121549
    opencv学习之hsv通道分解 #201906101704
    opencv学习之图像滤波预处理 #201906101646
    opencv学习之addWeighted图片打水印 #201906061030
    alpha channel
    rm git commit history
    git 使用学习
    排序算法的c++实现
    leetcode 246 中心对称数问题
    大数打印问题
  • 原文地址:https://www.cnblogs.com/eva_sj/p/6172254.html
Copyright © 2011-2022 走看看