LeetCode(7) - Reverse Integer

  题目的要求就是要反转一个Integer,例如输入123,则输出321,这一题比较tricky的地方就是它有可能越界,就是说1234567899,反过来是9987654321是一个越界的Integer,按照题目要求,碰到越界返回0,就好。关键的地方就在于,怎么判断它是否越界呢?一开始为了处理这个越界的问题,我才用了一个大小为10的int数组来存每一位,通过处理最高位来判断是否越界,后来发现有更为简单的方法,代码量要小很多,但是两者在速度上并没有什么太大的区别,代码如下:

  

 1 //思路:用数组去存位数,再翻转。
 2 public class Solution {
 3     public int reverse(int x) {
 4         if (x == 0) return 0;
 5         int[] num = new int[10];
 6         int index = 0;
 7         //x2用来判断x是大于0还是小于0。
 8         int x2 = x;
 9         while (x != 0) {
10             num[index++] = x % 10;
11             x = x / 10;
12         }
13         int reverseNum = num[0];
14         for (int i = 1; i < index; i++) {
15             //注意溢出的情况,不能直接乘以10,因为这样子不能通过正负号判断是否溢出,
16             //在刚好溢出的时候,最大的变化就是正负号的转变,所以得一个一个加。
17             if (i == 9) {
18                 for (int j = 0; j < 9; j++) {
19                     reverseNum += reverseNum;
20                     if (reverseNum < 0 && x2 > 0) return 0;
21                     if (reverseNum > 0 && x2 < 0) return 0;
22                 }
23                 reverseNum += num[i];
24             } else {
25                 reverseNum = reverseNum * 10 + num[i];
26             }
27         }
28         return reverseNum;
29     }
30 }

  后来发现了一个更为简洁的方法,那就是延长输入为long,这样子就不需要判断最高位,直接通过x是否越过Integer的最大最小值就可以判断出来。代码如下:

 1 public class Solution {
 2     public int reverse(int x) {
 3         long reverseNum = 0;
 4         while (x != 0) {
 5             reverseNum = 10 * reverseNum + (long)x % 10;
 6             x = x/10;
 7         }
 8         if (reverseNum > (long)Integer.MAX_VALUE || reverseNum < (long)Integer.MIN_VALUE) return 0;
 9         else return (int) reverseNum;
10     }
11 }

  相当简洁。但是如果速度影响不太多的情况下,本人还是倾向于第一种,因为延长Integer to long,总感觉是一种比较tricky的方法,如果输入的不是int x而是long x呢?或者说输入的是一个位数非常大的数字呢?

时间: 2024-08-24 04:34:29

LeetCode(7) - Reverse Integer的相关文章

Leetcode练习题 7. Reverse Integer

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 o

LeetCode记录之——Reverse Integer

Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Note:The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows. 反转数字的整数. 示例1:x = 123,返回321示例2:x = -

【LeetCode算法】Reverse Integer

LeetCode第7题: 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 store int

LeetCode题解 #7 Reverse Integer

上一次做完一个中等题觉得还挺简单,做一下简单题看看. 题目大意:给定一个整型(即int),将它的数位反过来,如321变为123,-321变为-123. 做了很久,因为简单题耗时的地方在于恶心!! 最后才看见溢出的时候应该返回0!! 一点都不难,特别是对于java. 我的思路: 1.将读入的int型包装成Integer,然后在转换成String.(看看前面有没有+-号) 2.将String 倒置,再转换为long.(一定要是long,否则无法判断溢出) 3.如果没溢出,再将long转换为int.

LeetCode题目1 - Reverse Integer

Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321Discuss: 1.If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.   2.Reversed integer overflow. public static int ReverseIntege

[LeetCode OJ]7. Reverse Integer

Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 个人的大体思路: 先判断是整数还是负数,flag记录符号(-1或1),把数字取绝对值然后转换成字符串,字符串逆序,把字符串再转换成数字,再乘以flag添加符号.这样就解决了数字末尾是0,翻转过来0成为开头,还要想办法去掉开头0的问题.代码如下 1 int reverse(int x) { 2 char s[100],

【leetcode】7. Reverse Integer

题目描述: Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 解题思路: 这道题比较简单,只要注意两个问题:1,输入可能有123,-123两种情况.2,可能会出现值溢出的情况,所以先用long类型处理,决定没有溢出后再转换为int 具体代码: 1 public static int reverse(int x) { 2 String s =""+x; 3

【Leetcode】 #7 Reverse Integer

Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 测试用例: 123………………321 -123………………-321 1200………………21 45134543545…………0(overflow) 2147483646………………0(虽然它小于最大值2147483647,但是调转过来之后溢出!) 最后两个陷阱是不容易发现的. int类型的最大值是2147483647

[LeetCode][JavaScript]Reverse Integer

Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 click to show spoilers. Have you thought about this? Here are some good questions to ask before coding. Bonus points for you if you have alread