剑指Offer
Aiclin
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指Offer 43. 【模拟】1~n 整数中 1 出现的次数(Hard)
【题目链接】题解1~n 整数中 1 出现的次数(清晰图解)思路代码class Solution: ### 1213 找规律(32 ms,14.8 MB) # 分别统计n中每一位数可能出现1的个数,再累加(因为每一次都固定了一位,因此不会存在重复计算) def countDigitOne(self, n: int) -> int: res = 0 # 初始化高位、当前位、低位(一开始没有低位)、数位(从个位开始) .原创 2020-12-14 01:03:17 · 126 阅读 · 0 评论 -
剑指Offer 46. 把数字翻译成字符串(Medium)/ 牛客 从1开始把数字翻译成字符串(Medium)/ 91.【有多少种】解码方法(M)
【题目链接】题解把数字翻译成字符串(动态规划,清晰图解)思路代码class Solution: # 1213 动态规划 + 字符串(40 ms,14.7 MB) def translateNum(self, num: int) -> int: s = str(num) # 将数字转换为字符串,方便计算 a = b = 1 # 初始化字符串为空 和 字符串长度为1 时的翻译次数均为1 # 顺序执行 .原创 2020-12-13 23:48:56 · 191 阅读 · 1 评论 -
剑指Offer 28. 【对称】的二叉树(Easy)/ 二叉树问题!!!
【题目链接】题解对称的二叉树(递归,清晰图解)思路代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: ### 1212 递归(44 ms,14.9 MB) def .原创 2020-12-12 14:34:57 · 205 阅读 · 1 评论 -
剑指Offer 19. 正则表达式匹配(Hard)
【题目链接】题解正则表达式匹配(动态规划,清晰图解)字节题库 - #剑19 - 困难 - 正则表达式匹配思路代码class Solution: def isMatch(self, s: str, p: str) -> bool: # 行m为字符串长度加一,列n为模式串长度加一 # 多的第一行元素表示字符串为空,而模式串非空,此时可能匹配 # 而多的一列元素表示字符串非空,而模式串为空,此时必不匹配,因此初始化为False..原创 2020-12-12 14:04:32 · 204 阅读 · 0 评论 -
剑指Offer 31. 栈的压入、弹出序列(Medium)
【题目链接】题解栈的压入、弹出序列(模拟,清晰图解)思路代码class Solution: ### 1209 模拟出栈(40 ms,13.5 MB) def validateStackSequences(self, pushed: List[int], popped: List[int]) -> bool: # 定义辅助栈进行模拟出栈,初始化出栈popped的下标为0 stack, i = [], 0 # 遍历入.原创 2020-12-09 22:26:11 · 143 阅读 · 0 评论 -
剑指Offer 34. 二叉树中和为某一值的路径(Medium)/ 二叉树的路径问题!!!
【题目链接】题解二叉树中和为某一值的路径(回溯法,清晰图解)思路代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: ### 1209 先序遍历 + 路径记录(48 ms,1.原创 2020-12-09 16:16:35 · 212 阅读 · 0 评论 -
剑指Offer 68 - II. 二叉树的最近公共祖先(Easy)/ 牛客:树为整型情况,非TreeNode
【题目链接】题解二叉树的最近公共祖先(后序遍历 DFS ,清晰图解)思路代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: ### 1208 后序遍历(88 ms,24..原创 2020-12-08 21:59:35 · 142 阅读 · 0 评论 -
剑指Offer 17. 【大数打印】打印从 1 到最大的 n 位数(Easy)
【题目链接】题解打印从 1 到最大的 n 位数(分治算法 / 全排列,清晰图解)思路代码class Solution: ### 1208 不考虑大数问题(44 ms,19.3 MB) def printNumbers(self, n: int) -> List[int]: return list(range(1, 10**n)) ### 1208 考虑大数问题(132 ms,19.5 MB) def printNumbers(.原创 2020-12-08 16:36:22 · 193 阅读 · 0 评论 -
剑指Offer 20. 【有限状态机 or 规则】表示数值的字符串(Medium)
【题目链接】题解表示数值的字符串(有限状态自动机,清晰图解)思路代码class Solution: def isNumber(self, s: str) -> bool: states = [ { ' ': 0, 's': 1, 'd': 2, '.': 4 }, # 0. start with 'blank' { 'd': 2, '.': 4 } , # 1. 'sign' b.原创 2020-12-08 01:04:33 · 174 阅读 · 0 评论 -
剑指Offer 57 - II. 【滑窗法】和为 S 的连续正数序列(Easy)/ 829. 【数学法】连续整数求和(Hard)
【题目链接】题解如何用滑动窗口解这道题(C++/Java/Python)思路代码class Solution: ### 1207 滑动窗口(124 ms,13.5 MB) def findContinuousSequence(self, target: int) -> List[List[int]]: # 初始化滑窗左l、右r从下标1开始(下标0表示0,不需要),当前总和s,待返回的列表res l, r, s, res = 1, 1.原创 2020-12-07 14:59:33 · 188 阅读 · 1 评论 -
剑指Offer 33. 【判断】二叉搜索树的后序遍历序列(Medium)/ 255. 二叉搜索树的前序遍历序列(Medium)
【题目链接】题解二叉搜索树的后序遍历序列(递归分治 / 单调栈,清晰图解)思路代码class Solution: ### 1207 递归分治(40 ms,13.6 MB) def verifyPostorder(self, postorder: List[int]) -> bool: # 将树划分为左、右子树,分别进行判断是否为二叉搜索树 def recur(l, r): # 若左边界>=右边界.原创 2020-12-07 14:15:43 · 170 阅读 · 0 评论 -
剑指Offer 47. 礼物的最大价值(Medium)/ 最优(min、max)路径问题!!!
【题目链接】题解礼物的最大价值(动态规划,清晰图解)思路代码class Solution: ### 1206 动态规划(40 ms,14.7 MB) def maxValue(self, grid: List[List[int]]) -> int: m, n = len(grid), len(grid[0]) # 直接先计算第一行(第一行中每个格子的值只会来源于左边一个格子) for j in range(1, n.原创 2020-12-06 20:44:48 · 293 阅读 · 1 评论 -
剑指Offer 65. 不用加减乘除做加法(Easy)
【题目链接】题解不用加减乘除做加法(位运算,清晰图解)思路代码class Solution: ''' 在计算机系统中,数值一律用补码来表示和存储。因为使用补码,可以将符号位和数值域统一处理,且加法和减法也可以统一处理! 1.原码求补码: 正整数的补码是其二进制表示,与原码相同 负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1 2.补码求原码: 正整数的补码就是原码 负整数的补码的补码.原创 2020-12-06 20:14:44 · 212 阅读 · 0 评论 -
剑指Offer 29. 顺时针打印矩阵(Easy)/ 逆时针打印二维矩阵
【题目链接】题解顺时针打印矩阵(模拟、设定边界,清晰图解)思路代码class Solution: ### 1205 (40 ms,14 MB) def spiralOrder(self, matrix: List[List[int]]) -> List[int]: # 矩阵为空,直接返回[] if not matrix: return [] res = [] l, r, t, b = 0, len(m.原创 2020-12-05 11:33:49 · 151 阅读 · 1 评论 -
剑指Offer 26. 【树B是否为树A】的子结构(Medium)/ 100. 树A树B是否相同 / 树A树B是否存在相同的子树 / 652. 【树本身】是否存在相同的子结构
【题目链接】题解树的子结构(先序遍历 + 包含判断,清晰图解)思路代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: ### 1204 先序遍历 + 判断(132 ms,1.原创 2020-12-05 01:14:36 · 221 阅读 · 0 评论 -
剑指Offer 50. 第一个只出现一次的字符(Easy)
【题目链接】题解第一个只出现一次的字符(哈希表 / 有序哈希表,清晰图解)思路代码class Solution: ### 1203 无序哈希表 + 两次遍历(96 ms,13.6 MB) def firstUniqChar(self, s: str) -> str: # 定义无序哈希表(假设它是无序的) dt = {} for c in s: # 哈希表中的键表示字符,而值表示是否已在哈希表.原创 2020-12-04 00:05:52 · 122 阅读 · 0 评论 -
剑指Offer 55. 二叉树的深度 / 平衡二叉树(Easy)
二叉树的深度平衡二叉树题解二叉树的深度(后序遍历、层序遍历,清晰图解)平衡二叉树(从底至顶、从顶至底,清晰图解)思路二叉树的深度平衡二叉树代码二叉树的深度# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.r..原创 2020-12-02 22:12:59 · 213 阅读 · 0 评论 -
剑指Offer 13. 机器人的运动范围(Medium)
【题目链接】题解机器人的运动范围( 回溯算法,DFS / BFS ,清晰图解)思路代码class Solution: ### 1202 回溯法 + DFS(56 ms,14.3 MB) def movingCount(self, m: int, n: int, k: int) -> int: # i和j表示行、列坐标,si和sj表示行、列的数位和 def dfs(i, j, si, sj): # 若行.原创 2020-12-02 20:00:58 · 169 阅读 · 0 评论 -
剑指Offer 52. 两个链表的第一个公共节点(Easy)
【题目链接】题解图解 双指针法,浪漫相遇思路代码# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: ### 1201 双指针(176 ms,28.3 MB) def getIntersectionNode(self, he...原创 2020-12-02 01:17:21 · 153 阅读 · 1 评论 -
剑指Offer 35. 复杂链表的复制(Medium)/ 【水塘抽样】382. 链表随机节点(M)/ 398. 随机数索引(M) /(深拷贝)克隆图(M)/ 飞机座位概率 / 按权重随机选择
【题目链接】题解复杂链表的复制(哈希表 / 拼接与拆分,清晰图解)思路代码"""# Definition for a Node.class Node: def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None): self.val = int(x) self.next = next self.random = random"""class ..原创 2020-11-30 22:56:25 · 159 阅读 · 1 评论 -
剑指Offer 59 - II. 【O(1)】队列的最大值(Medium)
【题目链接】题解如何解决 O(1) 复杂度的 API 设计题思路代码class MaxQueue: ### 1130 单调递减辅助队列(232 ms,17.2 MB) def __init__(self): # A是常规数组,B是用于记录和返回最大值的单调递减数组 self.A, self.B = [], [] def max_value(self) -> int: # B[0]记录的是当前队列中的max_.原创 2020-11-30 20:12:45 · 155 阅读 · 1 评论 -
剑指Offer 09. 用两个栈实现队列(Easy)/ 225. 用队列实现栈(Easy)/ 栈、队列实现问题!!!
【题目链接】题解用两个栈实现队列(清晰图解)思路代码class CQueue: ### 1130 辅助栈(456 ms,17 MB) def __init__(self): # 当且仅当B中为空时,才会将A中元素全部传入B中(即若B中元素没全部出栈时,A中的元素是会持续积压的) self.A, self.B = [], [] def appendTail(self, value: int) -> None: .原创 2020-11-30 18:51:34 · 157 阅读 · 1 评论 -
剑指Offer 07. 重建二叉树(Medium)/ 889. 根据前序和后序遍历构造二叉树 / 106. 从中序与后序遍历序列构造二叉树
【题目链接】题解重建二叉树(递归法,清晰图解)思路前序 + 中序 结合使用代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: ### 1130 递归(40 ms,18.原创 2020-11-30 16:09:03 · 189 阅读 · 1 评论 -
剑指Offer 37. 序列化二叉树(Hard)/ 428. 序列化N叉树(Hard)
【题目链接】题解序列化二叉树(层序遍历 BFS ,清晰图解)思路代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Codec: ### 1129 层序遍历 BFS(116 .原创 2020-11-30 00:11:05 · 187 阅读 · 0 评论 -
剑指Offer 49. 丑数(Medium)/ 263. 是否为丑数(Easy)/ 313. 超级丑数(Medium)
【题目链接】题解丑数(动态规划,清晰图解)思路代码class Solution: ### 1126 动态规划(136 ms,13.6 MB) def nthUglyNumber(self, n: int) -> int: dp = [1] * n # 因为人为规定第一个丑数为1,因此初始化时设为1(其实只需要dp[0]=1) a, b, c = 0, 0, 0 # 初始化三个指针为0,即指向第一个元素(可以想象2,3和5为.原创 2020-11-26 23:16:48 · 181 阅读 · 1 评论 -
剑指Offer 41. 数据流中的中位数(Hard)
【题目链接】题解数据流中的中位数(优先队列 / 堆,清晰图解)思路代码from heapq import *'''heaqp模块提供了堆队列算法的实现,也称为优先级队列算法。要创建堆,请使用初始化为[]的列表,或者可以通过函数heapify()将填充列表转换为堆。提供以下功能:heapq.heappush(堆,项目)将值项推入堆中,保持堆不变。heapq.heapify(x)在线性时间内将列表x转换为堆。heapq.heappop(堆)弹出并返回堆中的最小项,保持堆.原创 2020-11-25 19:34:20 · 216 阅读 · 0 评论 -
剑指Offer 42. 连续子数组的最大和(Easy)/ 918. 环形子数组的最大和(Medium)
【题目链接】题解连续子数组的最大和(动态规划,清晰图解)思路代码class Solution: ### 1124 动态规划(64 ms,19.7 MB) def maxSubArray(self, nums: List[int]) -> int: dp = [0] * len(nums) # dp[i] 表示以元素 nums[i] 为结尾的连续子数组最大和 dp[0] = nums[0] for i in range(.原创 2020-11-24 16:40:33 · 294 阅读 · 0 评论 -
剑指Offer 14- II. 剪绳子 II(Medium)
【题目链接】题解剪绳子 II(数学推导 / 贪心思想 + 快速幂求余,清晰图解)思路代码class Solution: ### 1124 动态规划(1104 ms,13.4 MB) def cuttingRope(self, n: int) -> int: dp = [0] * (n+1) dp[2] = 1 for i in range(3, n+1): for j in range(1,.原创 2020-11-24 14:45:50 · 139 阅读 · 0 评论 -
剑指Offer 36. 二叉搜索树展开为【双向】链表(Medium)/ LeetCode 109. 有序链表转换为【平衡】二叉搜索树(Medium)/ 升序数组转化为【平衡】二叉搜索树
【题目链接】题解二叉搜索树与双向链表(中序遍历,清晰图解)思路代码"""# Definition for a Node.class Node: def __init__(self, val, left=None, right=None): self.val = val self.left = left self.right = right"""class Solution: ### 1122 中序遍历(40 ms..原创 2020-11-23 01:17:32 · 217 阅读 · 1 评论 -
剑指Offer 57. 【双指针】和为 S 的两个数字(Easy)/ 1. 两数之和1、2、4
【题目链接】题解和为 s 的两个数字(双指针 + 证明,清晰图解)思路代码class Solution: ### 1122 对撞双指针(132 ms,24.4 MB) def twoSum(self, nums: List[int], target: int) -> List[int]: i, j = 0, len(nums) - 1 # 初始化头尾双指针 res = [] while i < j: .原创 2020-11-22 14:10:18 · 141 阅读 · 0 评论 -
剑指Offer 63. 股票的最大利润(Medium)
【题目链接】题解股票的最大利润(动态规划,清晰图解)思路代码class Solution: ### 1121 动态规划(48 ms,14.4 MB) def maxProfit(self, prices: List[int]) -> int: cost, profit = float('+inf'), 0 # 初始化最小成本cost,最大利润profit for price in prices: .原创 2020-11-22 00:56:32 · 122 阅读 · 0 评论 -
剑指Offer 44. 【模拟】数字序列中某一位的数字(Medium)
【题目链接】题解数字序列中某一位的数字(迭代 + 求整 / 求余,清晰图解)思路代码class Solution: ### 1120 迭代 + 求整 / 求余(36 ms,13.5 MB) def findNthDigit(self, n: int) -> int: # 初始化位数digit,数段start,数段含有的数字个数count digit, start, count = 1, 1, 9 .原创 2020-11-21 01:11:48 · 189 阅读 · 0 评论 -
剑指Offer 24. 反转链表(E)/ 反转链表2(M)/ 24.两两交换链表中的节点(Medium)/ 876. 链表的中间结点(Easy)/ 25. 链表中的节点每 K 个一组翻转(Hard)
【题目链接】题解反转链表(迭代 / 递归,清晰图解)思路代码# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: ### 1118 迭代 + 双指针(44 ms,14.3 MB) def reverseList(self, he.原创 2020-11-19 13:07:25 · 197 阅读 · 1 评论 -
剑指Offer 67. 把字符串转换成整数(Medium)/ 12. 整数转罗马数字(Medium)/ 13. 罗马数字转整数(E)
【题目链接】题解把字符串转换成整数(数字越界处理,清晰图解)思路代码class Solution: ### 1118 遍历 + 使用strip(48 ms,13.5 MB) def strToInt(self, str: str) -> int: # 首先去掉字符串首尾的空格 str = str.strip() # 若去掉空格后的字符串为空串,直接返回 if not str: return 0 ..原创 2020-11-18 14:20:59 · 208 阅读 · 0 评论 -
剑指Offer 68 - I. 二叉搜索树的最近公共祖先(Easy)/ 783. 二叉搜索树节点最小距离(Easy)
【题目链接】题解I. 二叉搜索树的最近公共祖先(迭代 / 递归,清晰图解)思路代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: ### 1118 迭代(88 ms,17..原创 2020-11-18 12:27:35 · 160 阅读 · 0 评论 -
剑指Offer 16. 数值的整数次方(Medium)/ 50. Pow(x, n) / 372. (a^b对1337取模的)超级次方(Medium)
【题目链接】题解数值的整数次方(快速幂,清晰图解)思路代码class Solution: def myPow(self, x: float, n: int) -> float: # 若x为0,则直接返回0 if x == 0: return 0 # 若幂为负数,则x变为倒数,n变为相反数 if n < 0: x, n = 1/x, -n # 初始化累乘器变量为1,用于每次二分时,使.原创 2020-11-18 00:21:59 · 186 阅读 · 1 评论 -
剑指Offer 03. 【原地置换】数组中重复的任意 1 个数字(Easy)
【题目链接】题解数组中重复的数字 (哈希表 / 原地交换,清晰图解)思路代码class Solution: ### 1117 哈希表(68 ms,22.6 MB) def findRepeatNumber(self, nums: List[int]) -> int: st = set() for num in nums: if num in st: return num # 若哈希表中已存在当前元素,则返回.原创 2020-11-17 21:51:04 · 216 阅读 · 1 评论 -
剑指Offer 74. 二维数组中的查找(Medium)/ 378. 有序矩阵中第 K 小的元素(Medium)/ 74. 搜索二维矩阵(Medium)
【题目链接】题解二维数组中的查找(标志数,清晰图解)思路代码class Solution: ### 1117 逆时针旋转45度 + 左下角开始(44 ms,17.5 MB) def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool: if len(matrix) == 0 or len(matrix[0]) == 0: return .原创 2020-11-17 20:41:54 · 397 阅读 · 0 评论 -
剑指Offer 59 - I. 滑动窗口的最大值(Easy)
【题目链接】题解滑动窗口的最大值(单调队列,清晰图解)思路代码class Solution: ### 1116 非严格递减双端对列(68 ms,17 MB) def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: # 初始化一个非严格递减的双端对列deque,其第一个元素保存的是每次滑窗中的最大值 deque = collections.deque() .原创 2020-11-17 01:15:06 · 158 阅读 · 0 评论 -
剑指Offer 30. 【O(1):min、push、pop】包含min函数的栈(Easy)
【题目链接】题解包含 min 函数的栈(辅助栈,清晰图解)思路代码class MinStack: ### 1116 辅助栈(76 ms,16.6 MB) def __init__(self): """ initialize your data structure here. """ # 数据栈A用于保存全部元素,实现栈正常的运算逻辑 # 辅助栈B用于保存A中所有非严格递减的元素,B的栈顶元素.原创 2020-11-16 21:54:12 · 169 阅读 · 1 评论
分享