自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 #144. 二叉树的前序遍历 (递归与迭代)

#144. 二叉树的前序遍历 (递归与迭代)题目给定一个二叉树,返回它的前序遍历。(中间节点,左子树,右子树)解答递归解法base case:如果根节点为空,则返回 []。recursive case:返回 [中间节点] + preorder(左子树) + preorder(右子树)class Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: if not

2022-03-07 11:24:57 6806

原创 #145. 二叉树的后序遍历

#145. 二叉树的后序遍历 (递归与迭代)题目给定一个二叉树,返回它的后续遍历。(后续:左右中,中间节点在最后)解答###递归做法如果当前根节点为空,返回空string,else返回traverse(左) + traverse(右) + [root.val]class Solution(object): def postorderTraversal(self, root): """ :type root: TreeNode :rtype:

2022-03-07 06:51:31 145

原创 #94. 二叉树的中序遍历

#94. 二叉树的中序遍历 (递归与迭代)题目给定一个二叉树,返回中序遍历结果。(左子树,中间节点,右子树)解答递归解法base case:如果为None,则返回 []recursive case: 返回inorder(左) + [中] + inorder(右)class Solution: def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]: if not root:

2022-03-07 06:51:10 210

原创 #232. 用栈实现队列

#232. 用栈实现队列题目用两个栈Stack,FILO,实现一个队列Queue,FIFO。应使其实现push,peek,pop,empty等功能。解答两个栈s1, s2。s1中转站,s2输出站(正确顺序)。Append, Pop:我们这里可以将要加入的元素先放入s1,当我们需要查看队列最前元素的时候,再将中转站的元素移到输出站,并且pop最上边的元素。Peek,Empty:通过pop,我们可以先保存peek的返回值,再补回这个被移除的元素。class MyQueue(object):

2022-01-24 10:16:19 4785

原创 #459. 重复的子字符串

#459. 重复的子字符串题目给定一个字符串s,求s是否可以由多个s的子串拼接组成。s = “abab” --> Trues = “aba” --> False解答直观解法取s所有的子串(一半以内的长度即可),看s是否可以由它的子串构成并且长度可以整除。class Solution: def repeatedSubstringPattern(self, s: str) -> bool: # if len(s) == 1: #

2022-01-19 09:57:45 71

原创 #28. 实现strStr()

#28. 实现strStr()题目给定字符串haystack和needle, 返回needle第一次在haystack出现的头索引;如果needle没出现,返回 -1。注意:如果needle是空字符串,返回0。解答遍历法遍历haystack的所有索引,如果haystack[i : i + n] == needle,返回i。如果needle为空,返回0。class Solution: def strStr(self, haystack: str, needle: str) ->

2022-01-19 09:55:55 77

原创 剑指Offer58-2:左旋转字符串

剑指Offer58-2:左旋转字符串题目给定字符串s,值n,将字符串的前n个字符移到字符串的末尾。解答子字符串解法方法一:直接切片,重组返回方法二:给原字符串对应的list申请n个额外空间,把前n项移到额外空间中,最后返回 n : 最后的字符串。return s[n : len(s)] + s[0 : n]orres = list(s)res.extend([' '] * n)res[len(s) : ] = res[0 : n]return "".join(res[n : ]

2022-01-19 09:54:17 71

原创 #151. 反转字符串里的单词

#151. 反转字符串里的单词题目给定字符串s,反转s中单词的顺序。s可能会由起头的多个空格,末尾的多个空格,以及单词与单词之间的多个空格。要求的输出在单词间只能包含一个空格。Input: s = "the sky is blue"Output: "blue is sky the"Input: s = " hello world "Output: "world hello"解答四步走:先把原字符串里所有的多余空格去掉,输出其list形式翻转list,使

2022-01-16 07:20:19 77

原创 剑指Offer 5:替换空格

剑指Offer 5:替换空格题目给定字符串,将字符串中每个空格替换成“%20”。例:“We are happy”–> “We%20are%20happy”解答###双指针解法将原字符串长度扩充,增加 空格数*2 的空间。i 指针指向原字符串尾,j 指针指向新字符串尾。如果字符串i的位置不为空格,j原样照搬;如果是空格,则把j相关部分换成“%20”class Solution: def replaceSpace(self, s: str) -> str:

2022-01-16 07:19:29 61

原创 #541. 反转字符串II

#541. 反转字符串II题目给定一个字符串s,值k,从开头开始,反转每2k个字符中的前k个。如果剩余字符小于k个,反转所有的字符,如果 k < 剩余字符 < 2k,反转前k个。解答先写反转字符串的函数reverseStr, 使得其返回一个反转过后的List形式的字符串。循环索引 i (每次添加2k更新),将索引 i 到 i + k之间的字符串赋给反转过后的字符串。class Solution: #reverse the string s from position l

2022-01-16 01:15:12 62

原创 #344. 反转字符串

#344. 反转字符串题目给定字符串s,将原字符串修改为反序的字符串。解答双指针解法left指向0位置,right指向len(s) - 1位置。只要left < right, 依次调换left right的对应值,更新left,right到下一位。class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s

2022-01-16 01:14:39 197

原创 #18. 四数之和

#18. 四数之和题目给定一个数组nums和值target,判断nums中是否存在4个元素a,b,c,d,使得 a + b + c + d == target。找出所有的不重复的这样的4个元素组。可以去看#15. 三数之和,唯一的区别就是在这里三个数相加,扩展到了四个数相加,且目标值为target。解答锁定二 – 双指针解法和#15. 三数之和一样的解法,不过多嵌套一层,总共锁定两个i,j位置,再用双指针left,right循环剩下的位置。class Solution: def f

2022-01-16 01:13:23 77

原创 #15. 三数之和

#15. 三数之和题目给定一个数组nums,找出所有三元组[nums[i], nums[j], nums[k]],使得nums[i] + nums[j] + nums[k] == 0 且 i != j, j != k, k != i。 (找出所有互异且和为零的数组中的三元组)解答锁定一–双指针解法先把array排序。锁定第一个位置i,后面设立left = i + 1, right = size - 1。如果 下一个 i 和之前的 i 对应的值一样,那么下一个i的情况必定被之前的i的包含,因

2022-01-15 07:00:04 71

原创 #383. 赎金信

#383. 赎金信题目给定字符串ransomNote,magazine,判断第一个字符串ransomNote可不可以由magazine里的字符组成。注意magazine里的每个字符只能被使用一次。解答用26位的数组生成一个characterBank,用以记录magazine的字母分布。在ransomNote里循环扣除,如果哪个字母的计数小于零,则证明扣除的比原有的多,证明ransomNote需要magazine以外更多的特定字母,return False。class Solution:

2022-01-15 06:59:32 91

原创 #454. 四数相加II

#454. 四数相加II题目给定四个数组nums1,nums2,nums3,nums4,求使得nums1[i] + nums2[j] + nums3[k] + nums4[l] = 0的 (i,j,k,l)的对数。例:nums1 = [1, 2] nums2 = [-2, -1] nums3 = [-1, 2] nums4 = [0, 2](0, 0, 0, 1) --> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 0(1, 1, 0, 0)

2022-01-15 06:58:58 150

原创 #1. 两数之和

#1. 两数之和题目给定一个数组nums,一个target,返回数组中两个相加等于target的数的索引,用List表示。每一个input都有一个解。解答哈希表解法创建dict() 记录数字的val:index。循环List中的每一个元素nums[i],如果target - nums[i]已经出现在dict里,返回相应索引。class Solution(object): def twoSum(self, nums, target): """ :typ

2022-01-15 06:58:27 158

原创 #202. 开心数 -- 快乐想象不到

#202. 开心数 – 快乐想象不到题目给定一个数,判定该数是否是开心数。开心数的定义:给定n,一遍遍把n更新为它每个数字的平方和。如果n最终到1,则该数为开心数;如果n最终循环了,则该数不是开心数。解答循环代表n在更新过程中重复了之前的值。当 n != 1 :储存 n 进 set values,用于记录出现过的 n求取 n 为它每个数字的平方和,存为temp – n 将要被更新成的值。如果在哪一刻temp的数出现在values里面,则遇到循环,return False。如果没有

2022-01-15 06:57:57 161

原创 #349. 两个数组的交集

#349. 两个数组的交集题目给定两个数组,求两个数组的交集。注意交集里每一个元素必须是唯一的。解答集合解法把两个数组转化成set,去除重复元素。循环更短的set,把其中出现在第二个set里的元素记录在数组中。class Solution: def set_intersection(self, set1: Set[int], set2: Set[int]) -> List[int]: return [x for x in set1 if x in set2]

2022-01-15 06:57:02 72

原创 #242. 有效的字母异位词

#242. 有效的字母异位词题目给定两个字符串s,t,判断t是否是s的字母异位词。解答排序解法如若字符串s,t含有相同的元素,则不难证明排好序后的s,t必然是相同的list。class Solution: def isAnagram(self, s: str, t: str) -> bool: #sorting if len(s) != len(t): return False else:

2022-01-15 06:56:24 57

原创 #142. 环形链表

#142. 环形链表题目给定一个链表,返回链表入环的第一个节点。如果无环,返回Null。解答HashSet解法设置cur指针,一直把cur指针更新为cur.next。如果哪一次新看的cur在HashSet visited里面,那么证明该节点是链表入环的第一个节点。每一次check完都要记得把该节点加入visited里。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):#

2022-01-14 09:18:52 78

原创 #160. 链表相交

##160. 链表相交题目给定两个单链表的初始节点headA, headB, 求两个单链表相交的起始节点。如若没有交点,返回None。解答暴力解法对于每一个headA中的元素Time-Limit exceeded# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass S

2022-01-14 09:17:34 74

原创 #19. 删除倒数第N个节点

#19. 删除倒数第N个节点题目删除链表的倒数第N个节点。解答双指针解法:left, right 中间保持n+1的距离,这样left指向n前边1位,right指向Nullassign left.next = left.next.next, 成功删除!# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val

2022-01-14 09:15:24 97

原创 #24. 两两交换链表中的节点

#24. 两两交换链表中的节点题目给定一个链表的头位置,交换相邻的两个点,返回交换后链表的头位置。解答画图即可知道如何转变。每一次iteration需要改三个next指针。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solutio

2022-01-14 09:14:30 74

原创 #206. 反转链表

#206. 反转链表题目给定一个链表的head,输出反转后的链表。解答双指针:一个指向prev,一个指向succ设置succ.next = prev更新prev,更新succ# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextcl

2022-01-14 09:13:55 35

原创 #707. 设计链表

#707. 设计链表题目设计链表,使得链表有以下功能:得到indexth 元素的值从头加元素从尾加元素在indexth Node前边加元素把indexth 的Node删除解答单链表增、减元素:找到prev和after,再进行next的指针操作。#Node classclass ListNode: def __init__(self,val): self.val = val self.next = None#has attribute o

2022-01-14 09:12:40 167

原创 #203. 移除链表中的元素

#203. 移除链表中的元素题目给定链表head,移除head链表中等于val的元素。解答给数组head外接的一个开头dummy,从curr.next开始遍历,只要curr.next != val,那么就更新curr为cur.next;如果curr.next == val,把curr.next赋为curr.next.next。不需要更新curr.next,因为本身就需要check下一个为curr.next.next的curr.next。# Definition for singly-link

2022-01-14 09:12:08 56

原创 #59. 螺旋矩阵2

#59. 螺旋矩阵2题目给定正整数n,生成一个n * n的矩阵,将1 ~ n2 螺旋填充进去。解答由外向内一圈一圈填充:填充上行从左到右填充右列从上往下填充下行从右到左填充左列从下往上每次填充都留末位出来。class Solution(object): def generateMatrix(self, n): """ :type n: int :rtype: List[List[int]] """

2022-01-14 09:11:33 75

原创 #209. 长度最小的子数组

#209. 长度最小的子数组题目给定数组nums,和target,找到长度最小的和大于等于target的子数组,返回长度。解答滑动窗口解法双指针,left,i。增加 i 直到 left … i 之间的sum大于等于target。把left往右移,同时把sum[left]减掉,直到sum小于target。增加 i ,循环上述过程。class Solution(object): def minSubArrayLen(self, target, nums): """

2022-01-14 09:08:45 84

原创 #977. 升序数组的平方

#977. 升序数组的平方##题目给定一个升序数组,返回排好序的平方过后的该数组。解答暴力解法平方,后用内置排序。class Solution(object): def sortedSquares(self, nums): """ :type nums: List[int] :rtype: List[int] """ #square for k in range(len(nums)):

2022-01-14 03:55:09 230

原创 #27. 移除元素

#27. 移除元素题目给定一个数组array,以及值value,原地移除所有数组array中等于value的元素,并返回移除以后的数组长度。解答###双指针移除法设慢指针 i,快指针 j,如果array[j] != value,则设array[i]为value (把数组array中所有非val的依次挪到前边去)。返回代表数组长度的 i (最后一次增量完恰好多1代表数组长)class Solution(object): def removeElement(self, nums, val)

2022-01-13 10:08:47 83

原创 #704. 数组--二分法

#704. 数组–二分法题目给定一个升序的数组array,给定target;如果target存在于数组中,则返回target的index,否则返回-1。解答设置start,end。在start位于end左边时,比较其中间位置的值和target的大小关系。如果等于,直接输出中间位置index;大于,则缩小查找范围,把end改为mid - 1;小于,则start改为mid + 1。class Solution(object): def search(self, nums, target):

2022-01-13 10:08:19 83

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除