力扣(LeetCode)解题历程(Python3解法)尽力继续更新

由于技术原因 部分题解我是看了大神之后做的 也有复制粘贴 见谅~

#1 两数之和

第一种思路

使用双重for循环,nums的每一个元素开始与它后面的每一个元素相加,如果等于target,则返回下标index,不等于target,则继续循环,如果这个元素跟后面的元素相加都不符合条件,就从它的下一个元素开始重复刚刚的步骤,直到符合条件为止。这个时间复杂度比较高

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        
        x = []
        
        for i in range(0,len(nums)):
            for a in range(i+1,len(nums)):
                if nums[i] + nums[a] == target:
                    x = [i,a]
                    return x
                    break
                else:
                    continue

第二种思路

通过字典的方法实现。
在Python3中有一个enumerate()的函数。
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
遍历字典,通过target-num得出another_num的数值,判断another_num是否在字典中。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dict = {}
        for index, num in enumerate(nums):
            another_num = target - num
            if another_num in dict:
                return [dict[another_num], index]
            dict[num] = index
        return None

#2 两数相加

思路

因为加法里会有进位,所以我们先设置一个carry变量用来保存进位的。ListNode(0)是用来初始化声明一个单链表的。ptr暂时理解为C语言的指针。
进入循环,开始进行相加。用ptr来保存结果,carry跟10整除,记录进位。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = ListNode(0)
        carry = 0
        ptr = head
        while True:
            if l1 != None:
                carry += l1.val
                l1 = l1.next
            if l2 != None:
                carry += l2.val
                l2 = l2.next
            ptr.val = carry % 10
            carry //= 10
            if l1 != None or l2 != None or carry != 0:
                ptr.next = ListNode(0)
                ptr = ptr.next
            else:
                break
        return head

#7 整数翻转

思路

将输入的字符串x变为str类型,因为可能存在负数,先将负号去掉,利用[-1::-1]将字符串翻转。判断原始字符串x是否为正整数,是的话直接返回,否则添加一个负号。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        str_x = str(x)[-1::-1].rstrip('-')
        if int(str_x) < 2**31:
            if x >=0:
                return int(str_x)
            else:
                return 0-int(str_x)
        return 0

#9 回文数

思路

这题so easy,就把输入的x转换成字符串翻转,再进行条件判断就ok了。

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        reverse_x = str(x)[::-1]
        if x >= 0 and x == int(reverse_x):
            return True
        else:
            return False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值