glmapper

每天一道算法题:颠倒整数

字数统计: 392阅读时长: 1 min
2018/11/10 Share

题目

给定一个范围为 32 位 int 的整数,将其颠倒。

例 1:

1
2
输入: 123
输出: 321

例 2:

1
2
输入: -123
输出: -321

例 3:

1
2
输入: 120
输出: 21

注意:
假设我们的环境只能处理 32 位 int范围内的整数。根据这个假设,
如果颠倒后的结果超过这个范围,则返回 0。

方案

这个题目其实挺简单的;思路如下:

  • 判断输入的数字是否大于最大整数,其实这里没有必要判断,因为如果参数输入大于最大整数的话会直接报错。
  • 将整数转换成字符串
  • 判断是否是负数,这个依据就是判断字符串中是否存在‘-’
  • 从后向前开始遍历,注意的是必须后向遍历且初始为0的情况下保持继续向前迭代。
  • 如果转换之后的值大于最大整数,则会导致string转int失败,抛出异常,那么我们直接在这把异常捕获,并且返回0(偷懒一波,丷)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     public int reverse(int x) {
    int result = 0;
    if (x >Integer.MAX_VALUE){
    return 0 ;
    }


    String s =String.valueOf(x);

    int len = 0;
    if (s!=null&&s.length()!=0&&s.charAt(0)=='-'){
    len = 1;
    }else if(s.length() == 1){
    return x;
    }

    int lastp = s.length()-1;
    boolean isStart = true;
    String ints = "";
    while( lastp >= len){

    if (isStart && s.charAt(lastp)=='0'){
    while (s.charAt(lastp)=='0'){
    lastp--;
    }
    isStart = false;
    }

    if (isStart){
    isStart = false;
    }

    ints = ints+s.charAt(lastp);
    lastp--;
    }
    try{
    result = Integer.parseInt(ints);
    }catch (NumberFormatException e){
    return 0;
    }


    return len==0?result:result*(-1);
    }

原文作者:GuoLei Song

原文链接:http://www.glmapper.com/2018/11/10/leetcodeone/

发表日期:November 10th 2018, 1:31:19 pm

更新日期:November 10th 2018, 1:32:34 pm

版权声明:转载请注明出处

CATALOG
  1. 1. 题目
  2. 2. 方案