5.21leetcode练习

两数之和

题目

新手司机上路,光荣翻车,没想出来。借了别人的答案,自行领会

答案

整数反转

题目

思路及答案

反转就是将数的顺序倒过来,那么就可以通过“除10取余”的方式,将末尾数一个个提出来,放到输出的字符串中,再将字符串转成整型返回结果。注意点如下:

  • 考虑正负数:正数可直接按思路操作,负数就需要先用绝对值按正数方式算,最后将运行结果取反数
  • 32位:需要考虑反转后的数字在范围[-2**32,2**32-1]内
class Solution:
    def reverse(self, x: int) -> int:
        x_str = str(x)		# 将整型的x转变成字符
        output = ''			# 先定义返回结果为空字符串
        
        # 判断正负
        if x_str[0] == '-':
            x = abs(x)						# 将负数取绝对值
            for count in range(len(x_str)-1):
                output += str(x % 10)		# 用“+”做字符串拼接
                x //= 10					# 将数取整后循环
            output = -int(output)		# 结果转变回负数
        else:
            for count in range(len(x_str)):
                output += str(x % 10)		
                x //= 10
                
        # 判断反转后的结果是否在[-2**32,2**32-1]内
        if -(2**31) <= int(output) <= (2**31-1):
            return(int(output))
        else:
            return(0)

总结:代码中有重复代码,还有很大的精简空间

回文数

题目

思路及答案

回文数的特点:

第一位(下标0)与最后一位(下标-1)相等,两下标相加为-1

第二位(下标1)与倒数第二位(下标-2)相等,两下标相加为-1

........

所以回文数两相等的下标之和相加为-1

class Solution:
    def isPalindrome(self, x: int) -> bool:
        '''将整数转化成字符串来解决的方式'''
        x_str = str(x)
        for index in range(len(x_str)//2):
            if x_str[index] != x_str[-1-index]:
                return(False)
        else:
            return(True)

总结:进阶中要求不用字符串,这里用了字符串,还有待改进

希望每天进步一点点

原文地址:https://www.cnblogs.com/863652104kai/p/10902392.html