美文网首页
4. 整数反转

4. 整数反转

作者: 沉默学飞翔 | 来源:发表于2019-10-22 08:47 被阅读0次

    回归次数:0

    题目:

    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处
    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    
    示例 1:
    
    输入: 123
    输出: 321
     示例 2:
    
    输入: -123
    输出: -321
    示例 3:
    
    输入: 120
    输出: 21
    注意:
    
    

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

    解答:

    
    public class Solution2 {
    
        /**
         * 方法一,把字符串一个一个存入栈里面,后进先出原则
         * @param x
         * @return
         */
        public int reverse(int x) {
    
            try{
                StringBuffer buffer = new StringBuffer();
                String temp = String.valueOf(x);
                boolean flag = false;
                if (temp.startsWith("-")){
                    flag = true;
                    temp = temp.substring(1,temp.length());
                }
    
                int[] list = new int[temp.length()];
                for(int i = 0;i < temp.length();i ++){
    
                    String t = String.valueOf(temp.charAt(i));
                    int c = Integer.parseInt(t);
                    list[i] = c;
    
                }
    
                for (int i = list.length - 1;i >= 0;i --){
    
                    buffer.append(list[i]);
                }
    
                String result = buffer.toString();
                while (result.startsWith("0") && result.length() != 1){
                    result = result.substring(1,result.length());
                }
    
                if (flag){
                    result = "-" + result;
                }
    
                int res = Integer.parseInt(result);
                return res;
            }catch (Exception e){
                return 0;
            }
        }
    
    
        /**
         * 官方解法
         * @param x
         * @return
         */
        public int reverse2(int x){
    
            int rev = 0;
            while (x != 0){
    
                int pop = x % 10;
                x /= 10;
                if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE /10 && pop > Integer.MAX_VALUE % 10)){
                    return 0;
                }
    
                if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && pop < Integer.MIN_VALUE % 10)){
                    return 0;
                }
    
                rev = rev * 10 + pop;
            }
            return rev;
        }
    
        public static void main(String[] args) {
    
            Solution2 s = new Solution2();
            System.out.println(s.reverse(1534236469));
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:4. 整数反转

          本文链接:https://www.haomeiwen.com/subject/bwmfvctx.html