![](https://img-blog.csdnimg.cn/20200624105510949.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指offer
剑指offer
Forlogen
无论世事如何,你都要成为一个更优秀的人。
展开
-
剑指offer 48 - 无重复字符的最长子串 - python
3.Longest Substring Without Repeating CharactersGiven a string, find the length of the longest substring without repeating characters.Example 1:Input: "abcabcbb"Output: 3 Explanation: The answer ...原创 2020-03-18 22:27:17 · 152 阅读 · 0 评论 -
剑指offer 29 + LeetCode 54 - 顺时针打印矩阵 - Python
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].length &l原创 2020-09-07 16:57:52 · 202 阅读 · 1 评论 -
剑指offer 68 -Ⅰ- 二叉搜索树的最近公共祖先 - Python
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6 解释: 节点原创 2020-09-06 23:29:38 · 176 阅读 · 0 评论 -
剑指offer 28 - 对称的二叉树 - Python
题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root原创 2020-09-04 17:27:47 · 162 阅读 · 0 评论 -
剑指Offer 53 - 0~n-1中缺失的数字 - Python
一个长度为n−1n-1n−1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n−10~n-10~n−1之内。在范围0~n−10~n-10~n−1内的nnn个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8限制:1 <= 数组长度 <= 10000根据题意可知,数字中所有的数字都在[0, n-1]内。因此,首先构建数组包含0~n,然后遍历数组找到那原创 2020-09-03 22:37:43 · 175 阅读 · 0 评论 -
剑指Offer 18 - 删除链表的节点 - Python
题目描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的原创 2020-09-01 23:23:22 · 284 阅读 · 0 评论 -
剑指offer 17 - 打印从1到最大的n位数 - Pyhon
题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印,n 为正整数题目要求顺序打印从1到位数为n的最大值,而最大值的下一个数必然是1后面跟n个0,这样题目就很容易了,直接写代码:class Solution: def printNumbers(self, n: int) -> List[原创 2020-09-01 23:02:46 · 118 阅读 · 0 评论 -
剑指offer-矩形覆盖 - Python
题目描述我们可以用2×12×1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2×12×1的小矩形无重叠地覆盖一个2×n2×n的大矩形,总共有多少种方法?依然是斐波那契数列问题class Solution: def rectCover(self, number): res = [0,1,2] while len(res) <= number: res.append(res[-1] + res[-2]) ret原创 2020-09-01 22:10:57 · 126 阅读 · 0 评论 -
剑指offer 10Ⅱ - 青蛙跳台阶问题 - python
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100# -*- coding:utf-8 -*-class Solution: def jumpFloor(se原创 2020-09-01 22:09:53 · 168 阅读 · 0 评论 -
剑指offer 65 - 不用加减乘除做加法 - python
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:相加各位的值,不算进位,二进制每位相加就相当于各位做异或操作,即 a ^ b ;计算进位值,相当于各位做与操作,再向左移一位,,即 (a & b) >> 1。重复上述两步, 各位相加 ,计算进位值。进位值为0,跳出循环# -*- coding:utf-8 -*-cla...原创 2020-04-06 18:06:45 · 231 阅读 · 0 评论 -
剑指offer 15 - 二进制中1的个数 - python
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:位运算class Solution: def NumberOf1(self, n): # write code here count = 0 for i in range(32): if n & 1 == 1: ...原创 2020-04-05 16:16:55 · 198 阅读 · 0 评论 -
剑指offer 14 - 剪绳子Ⅰ - python
题目描述:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]k[0],k[1],...,k[m]k[0],k[1],...,k[m]。请问k[0]×k[1]×...×k[m]k[0] \times k[1] \times ... \times k[m]k[0]×k[1]×...×k[m]可能的最...原创 2020-03-21 20:53:27 · 269 阅读 · 0 评论 -
剑指offer 13 - 机器人的运动范围 - python
题目描述:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路这道题和矩阵中的路径是类似的问题,所...原创 2020-03-21 19:17:24 · 263 阅读 · 0 评论 -
剑指offer 12 - 矩阵中的路径 - python
题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 [abcesfcsadee]\begin{bmatrix} a & b & c &e \\ s & f & c...原创 2020-03-21 18:12:08 · 426 阅读 · 0 评论 -
剑指offer 62 - 圆圈中最后剩下的数字 - python
题目描述:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一...原创 2020-03-18 14:22:33 · 169 阅读 · 0 评论 -
剑指offer 57 - 和为S的两个数字 - python
题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路:暴力搜索:找到所有的两个数和为S的集合然后依次遍历和为S的集合中的元素,并设置flag标记当前乘积最小的两个数,最后返回flagAC代码# -*- coding:utf-8 -*-# -*- coding:utf-8 -*-i...原创 2020-03-18 14:03:37 · 107 阅读 · 0 评论 -
剑指offer 54 - 二叉搜索树的第K个节点 - python
题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路:二叉搜索树的中序遍历结果自然就是升序序列,因此只需要先做中序遍历并存储遍历结果,然后输出第K个结果即可。AC代码# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self,...原创 2020-03-18 13:50:45 · 79 阅读 · 0 评论 -
剑指offer -序列化二叉树 - python
题目描述:请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化:指把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化:指根据某种遍历顺...原创 2020-03-18 13:40:00 · 195 阅读 · 0 评论 -
剑指offer 61 - 扑克牌中的顺子 - python
题目描述:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5...原创 2020-03-18 13:23:02 · 291 阅读 · 0 评论 -
剑指offer 58 - 反转单词顺序列 - python
题目描述:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路:将句子按空格划...原创 2020-03-18 13:02:21 · 149 阅读 · 0 评论 -
剑指offer 32 Ⅲ -从上到下打印二叉树 - python
题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:这道题做法和剑指offer - 把二叉树打印多行- python差不多,不同之处在于不同的层打印顺序不同:偶数层,从左往后打印奇数层,从右往左打印因此,在保存每层结果时,设置index来判断当前层是偶数层还是奇数层,如果是偶...原创 2020-03-18 12:59:05 · 156 阅读 · 0 评论 -
剑指offer - 二叉搜索树的后序遍历序列 - python
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输...原创 2020-03-18 11:53:02 · 297 阅读 · 0 评论 -
剑指offer 32 Ⅱ - 从上到下打印二叉树 - Python
题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行思路:根据题目的描述可知,打印的顺序即层序遍历的顺序,每一层的输出作为最后结果的一个元素。AC代码# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.l...原创 2020-03-18 11:45:31 · 128 阅读 · 0 评论 -
剑指offer - 二叉树的下一个结点 - python
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:二叉树的中序遍历顺序为左 -> 根 -> 右,那么需要首先判断给定的结点属于哪一种:如果它存在右子树,说明它是子树的父结点,下一个节点在其右子树中。如果右子树存在左孩子结点,那么下一个就是左孩子结点,否则说明它就是叶子结点,直接...原创 2020-03-18 11:34:56 · 190 阅读 · 0 评论 -
剑指offer - 删除链表中重复的结点 - python
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:链表法:首先遍历链表获取所有结点的val,然后移除所有个数大于1的值,接着利用处理后的结果构造新的链表,最后返回新链表的头结点即可。指针法构建一个新节点连接...原创 2020-03-18 11:24:07 · 168 阅读 · 0 评论 -
剑指offer 31 - 栈的压入、弹出序列
题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)。思路:按pushV的顺序将元素压入stack中,然后判断此时入栈的元素是否和po...原创 2020-03-18 10:28:58 · 83 阅读 · 0 评论 -
剑指offer 55 Ⅱ - 平衡二叉树 - python
题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路:平衡二叉树指二叉树的每个节点的左右子树的高度差的绝对值不超过1。那么我们从根节点开始依次判断节点的左右子树的深度,然后看差值是否超过1即可。AC代码# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val ...原创 2020-03-18 10:26:18 · 146 阅读 · 0 评论 -
剑指offer 55 - 二叉树的深度 - python
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:这道题和剑指offer - 二叉树中和为某一值得路径 - python做法是类似的,只不过少了些判断条件。从根节点开始深度优先遍历所有可能的路经,并使用全局变量maxdepth来保存最大深度。AC代码class Solution: def Tr...原创 2020-03-18 10:21:06 · 163 阅读 · 0 评论 -
剑指offer 34 - 二叉树中和为某一值的路径 - python
题目描述:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路二叉树可以使用递归处理,整数可以分为当前值和累加值的和。因此可以使用递归判断当前的树中是否存在路径使得累加值numbers + currentNumber = exceptNum...原创 2020-03-18 09:03:09 · 203 阅读 · 0 评论 -
剑指offer 32 - Ⅰ- 从上往下打印二叉树 - python
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:即二叉树的层序遍历,利用队列先进先出的性质依次取。AC代码# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# ...原创 2020-03-17 23:03:09 · 132 阅读 · 0 评论 -
剑指offer 27 - 二叉树的镜像 - python
题目描述:操作给定的二叉树,将其变换为原二叉树的镜像。思路:所谓镜像结构,即二叉树的左右子树进行互换,直到到达叶节点为止。因为不断的以左孩子节点和右孩子节点当作“根节点”进行子树互换,所以可采用递归。AC代码# -*- coding:utf-8 -*-# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x...原创 2020-03-17 23:01:05 · 156 阅读 · 0 评论 -
剑指offer - 树的子结构 - python
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:递归法: 对于给定的两棵二叉树来判断B是否是A的子结构,要充分考虑以下几种情形:若A和B中有一棵为空则两者之间必不存在结构,返回False若A和B均不为空,则要先在A中找到和B根节点相同的节点,然后判断它们的子节点是否相同,直到到达A或B的叶子节点根据二叉树本身的性质,整个过...原创 2020-03-17 22:49:45 · 87 阅读 · 0 评论 -
剑指offer 11 -旋转数组中最小数字 - python
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。给出的所有元素都大于0,若数组大小为0,请返回0。思路:线性搜索: 根据题目要求分别考虑数组为空、数组只有一个元素和数组包含多个元素考虑,当数组为空返回0;当数组只...原创 2020-03-17 10:50:13 · 200 阅读 · 0 评论 -
剑指offer 49 - 丑数 - python
题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路:因为丑数只包含质因子2,3,5,假设我们已经有nnn个丑数,按照顺序排列,且第nnn的丑数为MMM。那么第n+1n+1n+1个丑数一定是由这nnn个丑数分别乘以2,3,5,得到的所有大于MMM的结...原创 2020-03-17 10:42:42 · 161 阅读 · 0 评论 -
剑指offer 25 - 合并两个排序的链表 - python
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:根据题目的描述可知,给定的两个链表本身就是递增有序的。因此,为了得到合并后依然有序的新链表,我们可以新建一个结点newHeadnewHeadnewHead作为新链表的头结点,然后设置两个指针ppp和qqq分别指向两个链表的开始位置,然后比较ppp和qqq所指向结点值的大小:如果p....原创 2020-03-17 10:16:50 · 92 阅读 · 0 评论 -
剑指offer 24 - 反转链表 - python
题目描述:输入一个链表,反转链表后,输出新链表的表头。思路:辅助list法: 一种最为简单直接的方法,首先遍历链表获取结点的val列表,然后将val列表反转,最后使用反转后的新val列表构建新的链表,返回新链表表头即可反转元素法: 遍历链表并将遍历到的元素作为新链表的头结点,直到最后一个结点AC代码辅助list法# -*- coding:utf-8 -*-# class L...原创 2020-03-16 23:37:46 · 158 阅读 · 0 评论 -
剑指offer 7 - 重建二叉树 - python
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:根节点preorder[0]在中序遍历数列中的位置index,index左边的部分为左子树的中序遍历序列,index右边的为右子树的中序遍历序...原创 2020-03-16 22:00:15 · 96 阅读 · 0 评论 -
剑指offer 38 - 字符串的排列 - python
题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:迭代法: 首先获取字符串的字符列表形式,然后AC代码# -*- coding:utf-8 -*-class Solution: def Permutation(self, ss): ...原创 2020-03-17 11:04:05 · 230 阅读 · 0 评论 -
剑指offer 51 - 数组中的逆序对 - python
题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007思路根据题目描述可知,逆序对指的是数组中前一个数字大于后一个数字的组合形式。因此,对于给定的数组来说,最为暴力的办法就是直接一个个进行比较,从头依次遍历找它后面比他小的元素个数,最后...原创 2020-03-16 17:04:44 · 236 阅读 · 0 评论 -
剑指offer - 数组中只出现过一次的数字 - python
题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:这道题和下面的两道题本质上是一样的,因此同样的方法仍可使用。剑指offer - 字符流中第一个不重复的字符 - python剑指offer -第一个只出现一次的字符位置 - python法1: 首先看数组中有哪些数字,然后依次查找它们在数组中的个数,如果个数为1则保存,最后...原创 2020-03-16 14:35:49 · 307 阅读 · 0 评论