精华内容
下载资源
问答
  • 剑指offer Python版本经典代码集合
  • 剑指Offer:名企面试官精讲典型编程题 (第2版)》高清PDF,加原书C++源代码,再加个人Python实现的学习笔记
  • 剑指Offer Python题解offer-coding-interviews-python记录个人的剑指offer python题解在线阅读请戳这里现已添加PDF版,离线阅读也ok~在线编码可以去牛客网专区本仓库只收录了Python语言的题解和题目的简单分析,仅...

    剑指Offer Python题解

    offer-coding-interviews-python

    记录个人的剑指offer python题解

    在线阅读请戳这里

    现已添加PDF版,离线阅读也ok~

    在线编码可以去牛客网专区

    本仓库只收录了Python语言的题解和题目的简单分析,仅供学习交流使用,更多关于面试的知识、算法题的思路,以及一些题目的详细解答和推导,还请参阅《剑指Offer》这本书,多多支持下原作者。

    目录

    本repo按照博客的来组织,几个题合成一篇。

    第1篇

    | 数组 | 二维数组中的查找

    第2篇

    | 字符串 | 替换空格

    | 链表 | 从尾到头打印链表

    第3篇

    | 树 | 重建二叉树

    | 栈和队列 | 用两个栈实现队列

    | 查找和排序 | 旋转数组的最小数字

    第4篇

    | 递归和循环 | 斐波那契数列

    | 递归和循环 | 跳台阶

    | 递归和循环 | 变态跳台阶

    | 递归和循环 | 矩形覆盖

    第5篇

    | 位运算 | 二进制中1的个数

    | 代码的完整性 | 数值的整数次方

    | 代码的完整性 | 调整数组顺序使奇数位于偶数前面

    第6篇

    | 代码的鲁棒性 | 链表中倒数第k个结点

    | 代码的鲁棒性 | 反转链表

    | 代码的鲁棒性 | 合并两个排序的链表

    | 代码的鲁棒性 | 树的子结构

    第7篇

    | 面试思路 | 二叉树的镜像

    | 画图让抽象形象化 | 顺时针打印矩阵

    | 举例让抽象具体化 | 包含min函数的栈

    | 举例让抽象具体化 | 栈的压入、弹出序列

    | 举例让抽象具体化 | 从上往下打印二叉树

    | 举例让抽象具体化 | 二叉搜索树的后序遍历序列

    | 举例让抽象具体化 | 二叉树中和为某一值的路径

    第8篇

    | 分解让复杂问题简单 | 复杂链表的复制

    | 分解让复杂问题简单 | 二叉搜索树与双向链表

    | 分解让复杂问题简单 | 字符串的排列

    第9篇

    | 时间效率 | 数组中出现次数超过一半的数字

    | 时间效率 | 最小的K个数

    | 时间效率 | 连续子数组的最大和

    | 时间效率 | 整数中1出现的次数(从1到n整数中1出现的次数)

    | 时间效率 | 把数组排成最小的数

    第10篇

    | 时间空间效率的平衡 | 丑数

    | 时间空间效率的平衡 | 第一个只出现一次的字符位置

    | 时间空间效率的平衡 | 数组中的逆序对

    | 时间空间效率的平衡 | 两个链表的第一个公共结点

    第11篇

    | 知识迁移能力 | 数字在排序数组中出现的次数

    | 知识迁移能力 | 二叉树的深度

    | 知识迁移能力 | 平衡二叉树

    | 知识迁移能力 | 数组中只出现一次的数字

    | 知识迁移能力 | 和为S的连续正数序列

    | 知识迁移能力 | 和为S的两个数字

    第12篇

    | 知识迁移能力 | 左旋转字符串

    | 知识迁移能力 | 翻转单词顺序列

    | 抽象建模能力 | 扑克牌顺子

    | 抽象建模能力 | 孩子们的游戏(圆圈中最后剩下的数)

    | 发散思维能力 | 求1+2+3+…+n

    | 发散思维能力 | 不用加减乘除做加法

    第13篇

    | 综合 | 把字符串转换成整数

    | 数组 | 数组中重复的数字

    | 数组 | 构建乘积数组

    | 字符串 | 正则表达式匹配

    | 字符串 | 表示数值的字符串

    | 字符串 | 字符流中第一个不重复的字符

    | 链表 | 链表中环的入口结点

    | 链表 | 删除链表中重复的结点

    第14篇

    | 树 | 二叉树的下一个结点

    | 树 | 对称的二叉树

    | 树 | 按之字形顺序打印二叉树

    | 树 | 把二叉树打印成多行

    | 树 | 序列化二叉树

    | 树 | 二叉搜索树的第k个结点

    | 树 | 数据流中的中位数

    第15篇

    | 栈和队列 | 滑动窗口的最大值

    | 回溯法 | 矩阵中的路径

    | 回溯法 | 机器人的运动范围

    notes

    如有遗漏错误,欢迎指正

    展开全文
  • python-剑指offer1-5

    2021-01-13 14:13:37
    1、数组在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。...

    1、数组

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    classSolution:#array 二维列表

    defFind(self, target, array):#write code here

    ifany(array):

    m,n=len(array), len(array[0])

    min=array[0][0]

    max= array[m-1][n-1]if target < min or target >max:returnFalseelse:

    raw=0

    column= n-1Flag=Falsewhile raw <= m-1 and column >=0:

    curnum=array[raw][column]if target ==curnum:

    Flag=TruereturnFlagelif target >curnum:

    raw+= 1

    else:

    column-= 1

    returnFlagelse:return False

    解题思路:按行开始遍历,假设target大于第一行的最后一个数,那么我们就在第二行查找;如果target小于一行的最后一个数,那么我们检查下倒数第二列是否等于target。

    踩过的坑:len([[]])是等于1,因此判断二维数组是否为空要用any;初始时,要判断target是否在数组的范围内;要先用flag标记是否找到,找到了标记flag为True并结束循环。

    2、字符串

    请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

    defreplaceSpace(s):#ind = s.replace(" ","%20")

    s2 =[]

    s=list(s)for str1 ins:if str1 == " ":

    s2.append("%20")else:

    s2.append(str1)print("".join(s2))

    解题思路:将字符串转换为列表,遍历列表,是字母就加入,是空格就加入%20,最后用join转换为字符串。

    3、链表

    输入一个链表,按链表值从尾到头的顺序返回一个ArrayList

    #-*- coding:utf-8 -*-#class ListNode:#def __init__(self, x):#self.val = x#self.next = None

    classSolution:#返回从尾部到头部的列表值序列,例如[1,2,3]

    defprintListFromTailToHead(self, listNode):#write code here

    res =[]whilelistNode:

    res.append(listNode.val)

    listNode=listNode.nextreturn res[::-1]

    解题思路:链表的建立,考一个node = node.next,然后就是如何调用所定义的链表以及列表的翻转。

    或者我们也可以先翻转链表:

    #-*- coding:utf-8 -*-#class ListNode:#def __init__(self, x):#self.val = x#self.next = None

    classSolution:#返回从尾部到头部的列表值序列,例如[1,2,3]

    defprintListFromTailToHead(self, listNode):#write code here

    pre=None

    cur=listNodewhilecur:

    t=cur.next

    cur.next=pre

    pre=cur

    cur=t

    res=[]whilepre:

    res.append(pre.val)

    pre=pre.nextreturn res

    4、树

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    #-*- coding:utf-8 -*-#class TreeNode:#def __init__(self, x):#self.val = x#self.left = None#self.right = None

    classSolution:#返回构造的TreeNode根节点

    defreConstructBinaryTree(self, pre, tin):#write code here

    if not pre or nottin:returnNone

    root=TreeNode(pre[0])

    ind=tin.index(pre[0])if ind>0:

    root.left= self.reConstructBinaryTree(pre[1:ind+1],tin[:ind])if ind

    root.right= self.reConstructBinaryTree(pre[ind+1:],tin[ind+1:])return root

    解题思路:首先是树的建立,然后是先由先序遍历确定根节点,然后在中序遍历中找到根节点的位置,然后先序遍历中剩余的一半部分为左子树的先序遍历,一般为右子树的先序遍历,中序遍历中一半为左子树的中序遍历,一半为右子树的中序遍历,进行递归即可。

    5、栈

    用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。

    #-*- coding:utf-8 -*-

    classSolution:def __init__(self):

    self.s1=[]

    self.s2=[]defpush(self, node):#write code here

    self.s1.append(node)defpop(self):#return xx

    if len(self.s2)>0:returnself.s2.pop()else:if len(self.s1)>0:while len(self.s1)>0:

    self.s2.append(self.s1.pop())return self.s2.pop()

    解题思路:主要是pop()时需要注意,先要判断s2中是否为空,当s2中为空时才能将s1中的元素从后往前依次加入到s2中。

    展开全文
  • 剑指offer面试题内容第2章 面试需要的基础知识面试题1:赋值运算符函数面试题2:实现Singleton模式 解答面试题3:数组中重复的数字 解答面试题4:二维数组中的查找 解答面试题5:替换空格 解答面试题6:从尾到头打印...

    剑指offer面试题内容

    第2章 面试需要的基础知识

    面试题1:赋值运算符函数

    面试题2:实现Singleton模式  解答

    面试题3:数组中重复的数字 解答

    面试题4:二维数组中的查找 解答

    面试题5:替换空格 解答

    面试题6:从尾到头打印链表 解答

    面试题7:重建二叉树 解答

    面试题8:二叉树的下一个节点 解答

    面试题9:用两个栈实现队列 解答

    面试题10:斐波那切数列 解答

    面试题11:旋转数组的最小数字 解答

    面试题12:矩阵中的路径 解答

    面试题13:机器人的运动范围 解答

    面试题14:剪绳子 解答

    面试题15:二进制中1的个数 解答

    第3章 高质量的代码

    面试题16:数值的整数次方 解答

    面试题17:打印从1到最大的n位数 解答

    面试题18:删除链表的节点 解答

    面试题19:正则表达式匹配 解答

    面试题20:表示数值的字符串 解答

    面试题21:调整数组顺序使奇数位于偶数前面 解答

    面试题22:链表中倒数第k个节点 解答

    面试题23:链表中环的入口节点 解答

    面试题24:反转链表 解答

    面试题25:合并两个排序的链表 解答

    面试题26:树的子结构 解答

    第4章 解决面试题的思路

    面试题27:二叉树的镜像 解答

    面试题28:对称的二叉树 解答

    面试题29:顺时针打印矩阵 解答

    面试题30:包含min函数的栈 解答

    面试题31: 栈的压入、弹出序列 解答

    面试题32:从上到下打印二叉树 解答

    面试题33:二叉搜索树的后序遍历序列 解答

    面试题34:二叉树中和为某一值的路径 解答

    面试题35:复杂链表的复制 解答

    面试题36:二叉搜索树与双向链表 解答

    面试题37:序列化二叉树 解答

    面试题38:字符串的排列 解答

    第5章 优化时间和空间效率

    面试题39:数组中出现次数超过一半的数字 解答

    面试题40:最小的k个数 解答

    面试题41:数据流中的中位数 解答 (待优化)

    面试题42:连续子数组的最大和 解答

    面试题43:1~n整数中1出现的次数 解答 (待优化)

    面试题44:数字序列中某一位的数字  (跳过)

    面试题45:把数组排成最小的数 解答

    面试题46:把数字翻译成字符串 解答

    面试题47:礼物的最大价值 解答

    面试题48:最长不含重复字符的子字符串 解答

    面试题49:丑数 解答

    面试题50:第一个只出现一次的字符 解答

    面试题51:数组中的逆序对 解答

    面试题52:两个链表的第一个公共节点 解答

    第6章 面试中的各项能力

    面试题53:在排序数组中查找数字 解答

    面试题54:二叉搜索树的第K大节点 解答

    面试题55:二叉树的深度 解答

    面试题56:数组中数字出现的次数 解答

    面试题57:和为s的数字 解答

    面试题58:翻转字符串 解答

    面试题59:队列的最大值 解答

    面试题60:n个骰子的点数  解答(待解决)

    面试题61:扑克牌中的顺子 解答

    面试题62:圆圈中最后剩下的数字 解答

    面试题63:股票的最大利润 解答 (拓展见LeetCode 待解决)

    面试题64:求1+2+...+n 解答

    面试题65:不用加减乘除做加法 解答

    面试题66:构建乘积数组 解答

    面试题67:把字符串转换成整数 解答

    面试题68:求树中两个节点的最低公共祖先 解答 (待解决)

    展开全文
  • 每个编程题包括:题目描述,解析,Python代码实现三部分。
  • 剑指offer前十题的代码实现,全部可以跑通。可以在牛客网进行测试。
  • 面试题012 数值的整数次方解题思路1 考虑所有情况,循环连乘代码:def power(base, exponent):if (base==0):return 0if (exponent == 0):return 1res = 1for i in range(abs(exponent)): #i只是循环变量,不起作用...

    面试题012 数值的整数次方

    解题思路1 考虑所有情况,循环连乘

    代码:

    def power(base, exponent):

    if (base==0):

    return 0

    if (exponent == 0):

    return 1

    res = 1

    for i in range(abs(exponent)): #i只是循环变量,不起作用

    res *= base

    return 1/res if exponent < 0 else res

    解题思路2 快速幂快速幂详解

    代码

    def fast_power(self, base, exponent):

    if base == 0:

    return 0

    if exponent == 0:

    return 1

    e = abs(exponent)

    tmp = base

    res = 1

    while(e > 0):

    #如果最后一位为1,那么给res乘上这一位的结果

    if (e & 1 == 1):

    res =res * tmp

    e = e >> 1

    tmp = tmp * tmp

    return res if exponent > 0 else 1/res

    面试题 顺时针打印矩阵

    题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

    解题思路:打印第一行 然后删除第一行 剩余部分逆时针转动90度。重复以上步骤,直到矩阵为空

    代码

    # -*- coding:utf-8 -*-

    class Solution:

    def printMatrix(self, matrix):

    # write code here

    s=[]

    while matrix:

    s+=matrix[0]

    del matrix[0]

    matrix=zip(*matrix)[::-1]

    return s

    展开全文
  • 目录 题目 一、思路 二、代码 三、总结 题目 题目描述 ...这道考题,一定要注意保留pHead,并最终将其next指向空None,否则,开始时的头节点和下一个节点会形成互的情况,这时候遍历反转后的链表,就会形成死循环。
  • 剑指offer》详解-Python

    万次阅读 多人点赞 2019-04-25 08:25:12
    python刷《剑指offer》记录时间复杂度和多种做法。建议在 牛客网 刷题,判断是否成功通过所有样例,看懂思路和自己写出来并AC,完全是两码事。若有错误欢迎指正。 题目 难度 复杂度 解法 备注 ...
  • 剑指offer算法python

    2020-12-22 12:35:46
    递归与循环 斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 解题思路:找规律 设函数f(n) 当 n=0时 f(0) =0 当 n=1时 f(1) =1 ...
  • 剑指offer python

    2021-10-27 22:31:22
    剑指offer python数组1.构建乘机数组2. 数组中重复的数字3.数组中出现次数超过一半的数字4.和为S的两个数字5.数字在排序数组中出现的次数6. 调整数组顺序使奇数位于偶数前面7. 二维数组的查找8. 把数组排成最小的数9...
  • 目录题目一、思路二、代码三、总结 题目 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头...
  • 根据题目描述可知,逆序对的是数组中前一个数字大于后一个数字的组合形式。因此,对于给定的数组来说,最为暴力的办法就是直接一个个进行比较,从头依次遍历找它后面比他小的元素个数,最后统计最终的结果。但是...
  • 剑指Offer Python题解offer-coding-interviews-python记录个人的剑指offer python题解在线阅读请戳这里现已添加PDF版,离线阅读也ok~在线编码可以去牛客网专区本仓库只收录了Python语言的题解和题目的简单分析,仅...
  • 剑指offerpython答案整理(1)

    千次阅读 2017-08-28 20:18:55
    注意python中字符串是不可变类型,为了方便进行索引操作,把字符串转换为列表。分别从原始字符串末尾位置和补充后字符串末尾位置向前遍历,如果为空格,则替换,否则复制原字符,最后返回字符串。这里之所以要从后...
  • 剑指Offer(Python多种思路实现):删除链表中的节点 面试18题: 题目:删除链表中的节点 题一:在O(1)时间内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。 解题思路一:先...
  • 目录题目一、思路二、代码三、总结 题目 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n≤39 示例1 输入 3 ... if n==0:retu
  • 个人刷题记录!如果有不对的地方或者有更好的解法欢迎留言!!!!感恩! 文章目录1.二维数组中的查找 1.二维数组中的查找 import numpy as np ... def findNumberIn2DArray(self, matrix, target): ... :rtype: bool
  • 每个题目单独整理的版本存储在这里, 点击题目名字可以跳转到牛客网的成功提交记录,点击python可以看到存储库中的对应求解代码。 # -*- coding: utf-8 -*- from binarytree import tree # Definition for ...
  • 剑指Offer(Python多种思路实现):翻转字符串 面试58题: 题目:翻转字符串 题:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来...
  • 剑指Offer(Python多种思路实现):丑数 面试49题: 题:丑数 题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的...
  • 手撕剑指offer Python版(链表) 写在前面: 此篇针对剑指offer链表知识点,以思路引导代码实战与总结 代码基于牛客网测试通过 不足之处,万望包涵 快捷入口手撕剑指offer Python版(链表)JZ3 从尾到头打印链表...
  • = 1 return "".join(newStr) A2:直接使用python内置函数replace 语法: str.replace(old, new[, max]) 参数 •old – 将被替换的子字符串。 •new – 新字符串,用于替换old子字符串。 •max – 可选字符串, 替换不...
  • 剑指Offer(Python多种思路实现):正则表达式匹配 面试19题: 题目:正则表达式匹配 题:请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现...
  • 目录题目一、思路二、代码三、总结 题目 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 示例1 输入 源二叉树: 返回值 镜像二叉树 一、思路 【思路】 利用递归,从底向上改变左右子树的指针 ... left=se
  • 剑指Offer [Python] | 目录索引

    千次阅读 2019-07-25 11:35:34
    剑指Offer [Python] 」系列 :「转载」思路详细易懂的、python语言的众大神博文,「整理 & 汇总」各方资料,「学习 & 对比」多种思路(i.e. 暴力解法 vs 快速解法)。 一起在写bug 和 debug的路上越走越远吧~
  • 7/30用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路队列的Push就是直接进栈;Pop:节点进入stack1,然后再stack1的元素pop出,push到stack2中,stack2...
  • def list_all(string):  new_list_set = []  if len(string) == 1:  return string  for i in range(len(string)):  sub_string = string[:]  sub_string.pop(i)  result_list...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,766
精华内容 10,706
关键字:

剑指offerpython

python 订阅