LeetCode 7. Reverse Integer (倒转数字)

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output:  321

 

Example 2:

Input: -123
Output: -321

 

Example 3:

Input: 120
Output: 21

 

Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

 


题目标签:Math

 

  题目给了我们一个int 数字,让我们倒转它。
  利用 % 10 来拿到最右边数字,然后每次把res * 10 加上新拿到的数字,利用 x / 10 来遍历剩下的数字。
  这一题关键在于,如何检查 overflow,可以利用long,但是如果题目给你的是long,那你如何检查long 是否overflow呢。所以要在不使用更大的type的情况下来检查。
 
  新的res 是如何产生的:
    newRes = res * 10 + x % 10;
  那么如果新的res 没有overflow 的话,把newRes 倒推回去应该是和旧的 res 相等的:
    (newRes - x % 10) / 10 == res
  利用这一点,如果overflow的话,那么倒退回去肯定是 不相等的。
 
 
 
 

Java Solution:

Runtime beats 80.84% 

完成日期:06/12/2017

关键词:reverse int

关键点:% 10; / 10

 1 class Solution 
 2 {
 3     public int reverse(int x) 
 4     {
 5         int res = 0;
 6            
 7         while(x != 0)
 8         {
 9             int tail = x % 10;
10             int newRes = res * 10 + tail;
11             
12             if((newRes - tail) / 10 != res) // check overflow
13                 return 0;
14             
15             res = newRes;
16             x = x / 10;
17         }
18         
19     
20         return res;
21     }
22 }

参考资料:https://discuss.leetcode.com/topic/6104/my-accepted-15-lines-of-code-for-java

LeetCode 题目列表 - LeetCode Questions List

题目来源:https://leetcode.com/

posted @ 2017-12-10 05:20  Jimmy_Cheng  阅读(210)  评论(0编辑  收藏  举报