zoukankan      html  css  js  c++  java
  • LeetCode——7 Java之整数反转

    题目:

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

    示例 1:

    输入: 123
    输出: 321
    

     示例 2:

    输入: -123
    输出: -321

    注意:

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

    思路:可以把这个整数先取绝对值,然后转换为字符数组,逆序输出,判断输出后的值是否超出范围,若超出范围再做溢出处理,没有超出范围,如果输入的数是正数,就返回正数,如果输入的数是负数,逆序输出的值加上负号即可。此思路需要掌握的知识点:1.整数取绝对值,Math.abs(int);2.StringBuffer字符追加;3.整数转换为String类:String.valueOf(int);4.String类转换为char[]:char[] ch=s.toCharArray();5.StringBuffer类转换为String类:buf.toString();6.String类转换为int类型:Integer.parseInt(str);此时会出现NumberFormatException异常,所以记得抛出一下。6.另外,数值范围的表示,要知道怎么表示数字在 [−2^31,  2^31 − 1]它之间。

    代码:

     1 class Solution {
     2     public int reverse(int x) {
     3         StringBuffer buf=new StringBuffer();
     4         if(x>-2147483648||x<2147483647){
     5             int y=Math.abs(x);
     6             String s=String.valueOf(y);
     7             char[] ch=s.toCharArray();
     8             for(int i=ch.length-1;i>=0;i--){
     9                 buf.append(ch[i]);                
    10             }
    11             String str=buf.toString();  
    12             try{
    13                 int num=Integer.parseInt(str);
    14                 if(x>=0)
    15                   x=num;
    16                 if(x<0)
    17                   x=-num;
    18                 return x;
    19             }catch(NumberFormatException e){
    20                System.out.println("NumberFormatException!please input the integer again!");   
    21                 return 0;
    22                }    
    23         }else{
    24            return 0;                         
    25         } 
    26     }
    27 }

    第二种方法:

    数值如果超出范围就让它返回0,如果输入数值在整数范围内就通过求余和求商来计算。需要思考的点:1.数字范围表示:最大值:Integer.MAX_VALUE/10,最小值:Integer.MIN_VALUE。 2.%10求余,/10求商。

     1 class Solution{
     2     public int reverse(int x){
     3         int rev=0;
     4         while(x!=0){
     5               int pop=x%10;
     6               x/=10;          
     7  if(rev>Integer.MAX_VALUE/10||(rev==Integer.MAX_VALUE/10&&pop>7))
     8            return 0;
     9  if(rev<Integer.MIN_VALUE/10||(rev==Integer.MIN_VALUE/10&&pop<-8))
    10            return 0;
    11               rev=rev*10+pop;
    12         }
    13         return rev;
    14     }
    15 }
  • 相关阅读:
    【bzoj4596】[Shoi2016]黑暗前的幻想乡 容斥原理+矩阵树定理
    【bzoj4832】[Lydsy1704月赛]抵制克苏恩 期望dp
    【bzoj3796】Mushroom追妹纸 hash/sa+kmp+二分
    【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛
    【bzoj2813】 奇妙的Fibonacci数列 线性筛
    面向对象实现简单的学生课程选择
    小案例--面向对象中实现分页
    初识面向对象四(装饰器/反射)
    python小技巧--控制台输出带颜色的文字方法
    初识面向对象三(经典类/多态/鸭子类型/初识封装)
  • 原文地址:https://www.cnblogs.com/xiayanjiao/p/10269307.html
Copyright © 2011-2022 走看看