剑指offer
无纸~文
这个作者很懒,什么都没留下…
展开
-
青蛙跳台阶问题(一)
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)?解题思路第一步,我们确定每一次上台阶只有两种选择,跳一阶或者两阶。第二步,我们走完第一步时可能已经跳了一阶或者两阶,因此剩下的台阶是n-1或者n-2阶。第三步,设剩下的n-1阶有m1种跳法,剩下的n-2阶有m2种跳法,则n阶台阶的跳法有m1+m2种。...原创 2018-11-26 10:38:34 · 1072 阅读 · 0 评论 -
二叉搜索树的后续遍历
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思想:首先我们需要明确序列是后序遍历,因此最后一个节点一定是根节点。如果满足二叉搜索树,前部分的序列会分成两部分,前半部分是左子树并且值小于根节点,后半部分是右子树并且值大于根节点。整个过程分三个步骤:1.遍历数组,找到区分左右子树的节点...原创 2018-12-17 16:40:58 · 392 阅读 · 0 评论 -
二叉树的层次遍历
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:在已经给出根节点root,只需要设置一个队列,在循环中每次存储队列第一个节点的左右子树,输出队列队头的值,输出完再抛出。# -*- coding:utf-8 -*-class TreeNode: def __init__(self, x): self.val = x self...原创 2018-12-17 15:31:49 · 458 阅读 · 2 评论 -
栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)# -*- coding:utf-8 -*-class Solution: ...原创 2018-12-17 15:05:11 · 382 阅读 · 0 评论 -
剑指offer编程题合集——python版
为巩固编程能力,在此分享一些解题思路以及代码内容,并做持续更新。青蛙跳台阶问题1 青蛙跳台阶问题2 圆圈中最后剩下的数 输出链表倒数第k个结点 反转链表 合并两个排序的链表 顺时针打印矩阵 栈的压入、弹出序列 树的子结构 二叉树的镜像 二叉树深度 二叉树的层次遍历 二叉搜索树的后续遍历 平衡二叉树 ...原创 2018-12-10 14:47:54 · 668 阅读 · 0 评论 -
合并两个排序的链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。之前看过一些讨论区,有部分解答是使用python的list将两个链表的值保存,再进行排序重新插入链表。显然这不是出题者的用意,我们应该实现的是链表之间的结点连接。已经将每一步的思路放在注释中,在此就不赘述。class Solution: def Merge(self, p...原创 2018-12-10 14:31:17 · 355 阅读 · 0 评论 -
平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。 平衡二叉树:每一个结点的左右子树的高度之差不会超过1。因此,我们只需要获得根节点的左右子树高度,再对此高度进行判断即可class Solution: def IsBalanced_Solution(self, pRoot): # write code here def TreeDept...原创 2018-12-19 16:18:14 · 384 阅读 · 0 评论 -
二叉树深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 class Solution: def TreeDepth(self, pRoot): # write code here if pRoot==None: return 0 dep...原创 2018-12-19 15:50:49 · 377 阅读 · 0 评论 -
二叉树的镜像
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。首先对函数的输入参数root结点进行判断,是否是空结点,如果是空则返回None。接着利用最简单的交换规则,利用a、b临时存储left、right,实现左右子树的交换。最后分别对左子树和右子树进行递归,交换子树的左右子树。class Solution: # 返回镜像树的根节点 def Mirror(sel...原创 2018-12-13 15:34:30 · 349 阅读 · 0 评论 -
树的子结构
问题描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)#coding:utf-8class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: ...原创 2018-12-13 12:40:31 · 333 阅读 · 0 评论 -
反转链表
问题描述:输入一个链表,反转链表后,输出新链表的表头。解题思路:反转的含义就是让链表中的每一个结点的next不再指向下一个结点的地址,而是指向上一个结点的地址。方法一:我们可以进行第一遍循环遍历链表,将地址指针存储到list当中。遍历之后,此时p已经指向最后一个结点,此时再进行一次循环,将地址赋给每个next。# -*- coding:utf-8 -*-class ...原创 2018-12-05 16:41:11 · 407 阅读 · 0 评论 -
输出链表倒数第k个结点
问题描述:输入一个链表,输出该链表中倒数第k个结点。解题思想:若链表为空或者k为0,则返回的是None。当链表不为空时,有两种情况:链表长度n<k时,不存在倒数第k个结点,则返回None。链表长度n>k时,设置一个长度为k的list,不断地将链表新输入的结点存储进来,若数量超过了k,则把最早进来的抛出,直到最后一个结点,此时list存储的是最后k个结点,输出l...原创 2018-12-05 15:23:39 · 435 阅读 · 0 评论 -
青蛙跳台阶问题(二)
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2,也可以跳3,它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?解题思路可以类比每次只跳一级或者二级的跳台阶,可以参考另一篇文章:https://blog.csdn.net/noingw96/article/details/84525458当每次只跳一级或者二级时,我们利用分治的思想,将n阶的问题简化到n-1阶与n-2阶...原创 2018-11-26 16:14:27 · 558 阅读 · 0 评论 -
圆圈中最后剩下的数
题目描述:首先,让小朋友们围成一个大圈。然后,随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到大礼品。请你试着想下,哪个小朋友会得到这份大礼品呢?(注:小朋友的编号是从0到n-1)# ...原创 2018-12-24 15:56:06 · 374 阅读 · 0 评论