Leetcode笔记-(简单)7. 整数反转

笔记

  • 题目
  • 示例
    • 示例 1:
    • 示例2:
    • 示例3:
  • 注意
  • 代码
    • Python
    • C++

题目

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

示例

示例 1:

输入: 123
输出: 321

示例2:

输入: -123
输出: -321

示例3:

输入: 120	
输出: 21

注意

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

代码

Python

class Solution:    
	def reverse(self, x: int) -> int:  
		# n:记录数字元素个数    
		 if (x < 0):            
		 	n = len(str(x)) - 1        
		 else:            
		 	n = len(str(x))
        	# 将数字元素提取出来放进nums列表中
        	nums = []        
        	a = abs(x)       # x的绝对值
        	for i in range(n-1,-1,-1):            
        		nums.append(int(a / pow(10, i)))            
        		a -= pow(10, i) * int(a / pow(10, i))
		
		b=0        
		for i in range(len(nums)):            # 将反转后的绝对值的值赋给b
			b += pow(10, i) * nums[i]
		# 判断反转后为正整数还是负整数
        	if x >= 0:            
        		x = int(b)        
        	else:            
        		x = 0-int(b)
        	# 判断反转的值是否溢出
        	if x > pow(2, 31) -1 or x < 0 - pow(2, 31):
			return 0        
        	else:            
        		return x

C++

思路一: 将整数的位数的元素依次提取出来,在反向相加,结果时间超时

思路二:依次取模,乘以10,直到取完为止,比如x = 123,取模得到3,使得temp = 3,
,然后x = x / 10 = 12;重复,取模2,temp = 310 + 2 = 32,x = x / 10 = 1; 取模1, temp = 3210 + 1 = 321,这时取完得到整数反转的值321。总结:temp = temp+x/10;x = x / 10。

class Solution {
public:
    int reverse(int x) {
        int mod;
        
        mod = x % 10;
        x = x / 10;

        while(x)
        {
            mod = mod * 10 + x % 10;
            x = x / 10;
        }

        if (mod < -pow(2, 31) || mod > pow(2, 31) - 1)
        {
            return 0;
        }
        return mod;
    }
};

结果:Line 11: Char 23: runtime error: signed integer overflow: 964632435 * 10 cannot be represented in type ‘int’ (solution.cpp)
原因:temp超值

修改:temp由int改为long,增大范围。代码如下:

class Solution {
public:
    int reverse(int x) {
        long mod;
        // x = abs(x);
        mod = x % 10;
        x = x / 10;

        while(x)
        {
            mod = mod * 10 + x % 10;
            x = x / 10;
        }

        if (mod < -pow(2, 31) || mod > pow(2, 31) - 1)
        {
            return 0;
        }
        return mod;
    }
};

结果:
执行结果:通过
执行用时:0 ms, 在所有 C++ 提交中击败了100.00% 的用户
内存消耗:6 MB, 在所有 C++ 提交中击败了48.16% 的用户

你可能感兴趣的:(Leetcode,leetcode,python,算法,数据结构)