• 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
  • 相关阅读:
    Vim Reference
    Java 8 Consumer、Supplier、Predicate、Function
    Java 8 Stream 用法
    Java 基础 Builder模式
    Spring/Spring-Boot 学习 使用自定义的ArgumentResolver
    架构之分布式图片存储系统架构
    微服务和SOA服务
    Centos 上 Tengine安装
    .NET平台上插拔姿势的AOP
    P1424 刷题记录
  • 原文地址:https://www.cnblogs.com/pegasus923/p/8418953.html
Copyright © 2020-2023  润新知