力扣刷题(六)整数反转--python语言描述--reverse

问题描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:
输入: 123
输出: 321

示例 2:
输入: -123
输出: -321

示例 3:
输入: 120
输出: 21

注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

方法一、

  • 将int转换成string后,翻转;
  • 做相应判断以及是否溢出;
  • 将string型转换成int,最后输出;

code:

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        
        x = str(x)  #把数值型x变成字符串
        reverse_x = []
        for i in range(len(x)):
            reverse_x.append(x[(-1)-i])
            
        if reverse_x[0] == '0' and len(reverse_x) > 1:
            a = reverse_x.remove(reverse_x[0])
          
        tmp_reverse = reverse_x[0] 
        if reverse_x[-1] != '-':
            for i in range(1, len(reverse_x)):
                tmp_reverse = tmp_reverse + reverse_x[i]
            final_reverse = int (tmp_reverse)
            if final_reverse < 2147483647 and final_reverse > -2147483648:
                return final_reverse
            else:
                return 0
        else:
            for i in range(1, len(reverse_x)-1):
                tmp_reverse = tmp_reverse + reverse_x[i]
            final_reverse = -(int (tmp_reverse)) 
            if final_reverse < 2147483647 and final_reverse > -2147483648:
                return -(int(tmp_reverse))
            else:
                return 0

在这里插入图片描述
需要注意的是:
在计算机中,所有的数据都是以二进制方式存储的。所说的32位整数,同样说的是二进制值。对于32位整数,可以表示的范围为-2147483648 ~ 2147483647。不超过32位整数,就是说数值是在这个范围内的。

方法二、C++code
算法

反转整数的方法可以与反转字符串进行类比。

我们想重复“弹出” x 的最后一位数字,并将它“推入”到 rev 的后面。最后,rev 将与 x 相反。

要在没有辅助堆栈 / 数组的帮助下 “弹出” 和 “推入” 数字,我们可以使用数学方法。

//pop operation:
pop = x % 10;
x /= 10;
//push operation:
temp = rev * 10 + pop;
rev = temp;

但是,这种方法很危险,因为当temp=rev⋅10+pop 时会导致溢出。

幸运的是,事先检查这个语句是否会导致溢出很容易。

力扣刷题(六)整数反转--python语言描述--reverse_第1张图片

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};

在这里插入图片描述

这里对运算符: ‘/’, ‘//’, '%'要理解正确
力扣刷题(六)整数反转--python语言描述--reverse_第2张图片

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
a = 21
b = 10
c = 0
 
c = a + b
print "1 - c 的值为:", c
 
c = a - b
print "2 - c 的值为:", c 
 
c = a * b
print "3 - c 的值为:", c 
 
c = a / b
print "4 - c 的值为:", c 
 
c = a % b
print "5 - c 的值为:", c
 
# 修改变量 a 、b 、c
a = 2
b = 3
c = a**b 
print "6 - c 的值为:", c
 
a = 10
b = 5
c = a//b 
print "7 - c 的值为:", c

输出结果:

1 - c 的值为: 31
2 - c 的值为: 11
3 - c 的值为: 210
4 - c 的值为: 2
5 - c 的值为: 1
6 - c 的值为: 8
7 - c 的值为: 2

注意:Python2.x 里,整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。

>>> 1/2
0
>>> 1.0/2
0.5
>>> 1/float(2)
0.5

你可能感兴趣的:(算法刷题,编程,编程,算法,刷题)