本文参考自力扣题目
1、20. 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
class Solution:def isValid(self, s: str) -> bool:dic = {'(': ')', '{': '}', '[': ']'}nums = []for i in s:if i in "({[":nums.append(i)else:if nums == [] : return Falseelse:j = nums.pop()if i != dic[j]: return Falseif nums == []: return Trueelse: return False
感觉逻辑略感复杂,去复习一下栈里边检查合法性的代码
2、合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
cv
对链表还是没有理解透彻
怎么也想不到可以用递归啊🤪
# Definition for singly-linked list.# class ListNode:#def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution:def mergeTwoLists(self, l1, l2):if l1 is None:return l2elif l2 is None:return l1elif l1.val < l2.val:l1.next = self.mergeTwoLists(l1.next, l2)return l1else:l2.next = self.mergeTwoLists(l1, l2.next)return l2
其实代码简洁的递归常常不是最优解
3、26. 删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
class Solution:def removeDuplicates(self, nums: List[int]) -> int:if len(nums) < 2: return len(nums)c = nums[0]index = 1while(index < len(nums)):if nums[index] != c:c = nums[index]index += 1else:del nums[index]return len(nums)