Leetcode# 7. Reverse Integer(位运算)

来源:互联网 发布:淘宝店升级天猫店 编辑:程序博客网 时间:2024/05/21 08:54

声明:题目解法使用c++和Python两种,重点侧重在于解题思路和如何将c++代码转换为python代码。

题意

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321
click to show spoilers.
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

题意

给你一个整数,若这个数在有符号32位范围内逆序变化输出,超出输出0。

思路:C++语言

获取有符号int的范围(这里用到了位运算的小技巧),判断逆序后的数是否在int范围内。

class Solution {public:    int reverse(int x)    {        int min = (1<<31)*(-1), max = (1<<31)-1;        long long int now = 0;        while(x)        {            now = now * 10 + x % 10;            x = x / 10;        }        if(now < min || now > max)            return 0;        return now;    }};

思路:python语言

在python中“%”为取余运算中
-9 % 5 = 5
9 % -5 = -5
没有c ++中方便,这点比较麻烦,所以我们不如求逆序之前先判断数的正负号。

class Solution(object):    def reverse(self, x):        """        :type x: int        :rtype: int        """        min = -2147483648        max = 2147483647        now = 0        flag = 0 #代表非负数        if x < 0:            x = -x            flag = 1        while x :            now = now * 10 + x % 10            x = x / 10        if flag ==  1:            now = -now        if now < min or now > max:              return 0        return now

Github本题题解:https://github.com/xuna123/LeetCode/blob/master/Leetcode%23%207.%20Reverse%20Integer.md

原创粉丝点击