zoukankan      html  css  js  c++  java
  • No.007:Reverse Integer

    问题:

    Reverse digits of an integer.
    Example1:
    x = 123, return 321
    Example2:
    x = -123, return -321

    官方难度:

    Easy

    翻译:

    将一个整数倒转输出。

    例子:

    整数:123,倒转输出:321。

    整数:-123,倒转输出:-321。

    1. 给定例子中,存在负数情况,将负数的输入转化成整数统一讨论,同时记录负数标志位,在返回时使用。
    2. 优先获取整数的位数,有两种方法:第一种是根据定义出发,循环将输入数字除以10,累加次数。这种方法需要使用一个输入数字的副本,因为在运行过程中会改变输入的值,影响之后的操作;第二种方法,是将输入数字转化成字符串,计算字符串的长度length。显然第二种“取巧的方式”拥有更好的效率。
    3. 定义一个sum值累加,将每一次的输入值的最后一位乘以10的length-1次方,然后将输入除以10,直到循环结束。
    4. 在提交代码之后,发现一个隐藏条件,当倒转的整数超过int所能表达的最大值时该怎么办?要求方法的返回值明确为int值。LeetCode提示我,这种情况返回0。那么就需要将sum升级为long型来存储数字,再返回的时候做一次判断。
    5. 在考虑相反数的时候,有一种极端情况:输入值为Integer.MIN_VALUE。众所周知,负数能表达值的绝对值,比正数的最大值还要大1,这时候对它做相反数操作,这个值是不会变的。万幸,这个数的最后一位是8,这表示在倒转之后的值是0,不用再特殊考虑。
    6. 没有入参检查的必要。

    解题代码:

     1 public static int reverse(int x) {
     2         // 正负的标志位
     3         int sign = 1;
     4         // 考虑负数转化
     5         if (x < 0) {
     6             x = -x;
     7             sign = -1;
     8         }
     9         long sum = 0;
    10         // 先获取位数
    11         int length = String.valueOf(x).length();
    12         // 取余数,乘以因子累加
    13         while (x > 0) {
    14             // 要先减length
    15             sum += (x % 10) * Math.pow(10, --length);
    16             x /= 10;
    17         }
    18         return sum > Integer.MAX_VALUE ? 0 : (int) sum * sign;
    19     }
    reverse

    相关链接:

    https://leetcode.com/problems/reverse-integer/

    https://github.com/Gerrard-Feng/LeetCode/blob/master/LeetCode/src/com/gerrard/algorithm/easy/Q007.java

    PS:如有不正确或提高效率的方法,欢迎留言,谢谢!

  • 相关阅读:
    T-SQL:Varchar和Nvarchar区别(八)
    UI5-文档-4.1-Hello World!
    UI5-文档-4-Walkthrough
    UI5-文档-3-Hello World!
    UI5-文档-2.5-开发混合Web容器
    UI5-文档-2.4-Node.js-Based开发环境
    UI5-文档-2.3-使用SAPUI5工具为Eclipse开发应用程序
    UI5-文档-2.2-使用SAP Web IDE开发应用程序
    UI5-文档-2.1-使用OpenUI5开发应用
    UI5-文档-2-开发环境
  • 原文地址:https://www.cnblogs.com/jing-an-feng-shao/p/5912586.html
Copyright © 2011-2022 走看看