zoukankan      html  css  js  c++  java
  • LeetCode 7. Reverse Integer

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

    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.

    • 简单题,类似字符串处理。主要是考虑integer overflow情况。比较tricky的方法是用long来存储result结果,然后判断是否超过INT_MAX/INT_MIN。
    • 我用的还是判断overflow。由于输入不可能是INT_MAX/INT_MIN的reverse,所以不需要考虑abs(INT_MIN) > abs(INT_MAX)的情况。
     1 //
     2 //  main.cpp
     3 //  LeetCode
     4 //
     5 //  Created by Hao on 2017/3/16.
     6 //  Copyright © 2017年 Hao. All rights reserved.
     7 //
     8 
     9 #include <iostream>
    10 #include <cstring>
    11 #include <vector>
    12 using namespace std;
    13 
    14 class Solution {
    15 public:
    16     int reverse(int x) {
    17         int result = 0;
    18         int sign = 1;
    19         
    20         if (x < 0) {
    21             sign = -1;
    22             x = abs(x);
    23         }
    24         
    25         while (x != 0) {
    26             if (result > (INT_MAX - x % 10) / 10) // it's ok coz input would not be reverse of INT_MIN
    27                 return 0;
    28 
    29             result = result * 10 + x % 10;
    30             x /= 10;
    31         }
    32         
    33         return result * sign;
    34     }
    35 };
    36 
    37 int main(int argc, char* argv[])
    38 {
    39     Solution    testSolution;
    40     string      result;
    41     
    42     vector<int> iVec = {123, -123, 120, 2147483647, -2147483648, 0};
    43     
    44     /*
    45      321
    46      -321
    47      21
    48      0
    49      0
    50      0
    51      */
    52     for (auto i : iVec) {
    53         cout << testSolution.reverse(i) << endl;
    54     }
    55 
    56     return 0;
    57 }
    View Code

    • 一种解法同上,字符串处理。注意Python3中整除用//,而不是/。
    • 第二种解法利用Python sliding s[::-1]做字符串反转。
    • Python3 字符串 | 菜鸟教程
      • http://www.runoob.com/python3/python3-string.html
    • python - Maximum and Minimum values for ints - Stack Overflow
      • https://stackoverflow.com/questions/7604966/maximum-and-minimum-values-for-ints
      • Python 3
        • In Python 3, this question doesn't apply. The plain int type is unbounded.
        • However, you might actually be looking for the machine's word size. That's still available in Python 3 as sys.maxsize.
      • Python 2
        • In Python 2, the maximum value for plain int values is available as sys.maxint:
        • >>> sys.maxint 9223372036854775807
      • You can calculate the minimum value with -sys.maxint - 1 as shown here.
      • Python seamlessly switches from plain to long integers once you exceed this value. So most of the time, you won't need to know it. 
     1 class Solution:
     2     def reverse(self, x: int) -> int:
     3         result = 0
     4         sign = 1
     5         
     6         if x < 0:
     7             sign = -1
     8             x = abs(x)
     9             
    10         while x != 0:
    11             if result > ( 2**31 - ( x % 10 ) ) // 10: # be careful of floor division (integer division)
    12                 return 0
    13             
    14             result = result * 10 + x % 10
    15             x //= 10 # be careful of floor division (integer division)
    16         
    17         return result * sign
    18     
    19     def reverse2(self, x: int) -> int:    
    20         # [begin:end:step] - leaving begin and end off and specifying a step of -1, it reverses a string.
    21         s = str( abs( x ) )
    22         x_reverse = int( s[ ::-1 ] ) if x > 0 else (- int( s[ ::-1 ] ) )
    23         
    24         if ( ( x_reverse >= - 2**31 ) and ( x_reverse <= 2**31 - 1 ) ):
    25             return x_reverse
    26         else:
    27             return 0
    View Code
  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/pegasus923/p/8418953.html
Copyright © 2011-2022 走看看