5.21leetcode练习

两数之和

题目

1580025-20190521210807821-1276251996.png

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

答案

1580025-20190521210852186-2100711815.png

整数反转

题目

1580025-20190521210909413-995887273.png

思路及答案

反转就是将数的顺序倒过来,那么就可以通过“除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)

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

回文数

题目

1580025-20190521210928206-1051743879.png

思路及答案

回文数的特点:

第一位(下标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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值