PYTHON实现剑指Offer
基于牛客网在线编程平台,从题目理解到编程实现
Datawhale
一个开源的学习组织
展开
-
剑指offer_第20题_包含min函数的栈_Python
题目描述定义栈的数据结构并在该类型中实现一个能够得到栈中所含最小元素的min函数。时间复杂度应为O(1)理解什么是栈算法复杂度解题思路思路1class Solution: def __init__(self): self.stack = [] self.min_stack = [] def push(self,...原创 2018-09-12 17:40:40 · 731 阅读 · 0 评论 -
剑指offer_第19题_顺时针打印矩阵_Python
题目描述输入一个矩阵按照从外向里以顺时针的顺序依次打印出每一个数字例如,如果输入如下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....原创 2018-09-12 11:45:27 · 543 阅读 · 0 评论 -
剑指offer_第18题_二叉树的镜像_Python
题目描述将给定的二叉树,变换为其镜像解题思路思路1 递归class Solution: # 返回镜像树的根节点 def Mirror(self, root): if root: root.left,root.right=root.right,root.left if root.left: ...原创 2018-09-11 21:33:31 · 553 阅读 · 0 评论 -
剑指offer_第17题_树的子结构_Python
题目描述输入两棵二叉树A,B判断B是不是A的子结构。其中空树不是任意一个树的子结构class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None解题思路思路1class Solution: def ...原创 2018-09-11 18:29:49 · 603 阅读 · 0 评论 -
剑指offer_第16题_合并两个排序的链表_Python
题目描述输入两个单调递增的链表输出两个链表合成后的链表合成后的链表满足单调不减规则解题思路思路1递归 def Merge(self, pHead1, pHead2): merge = None if pHead1 == None: return pHead2 elif pHead2 == ...原创 2018-09-11 16:13:43 · 468 阅读 · 0 评论 -
剑指offer_第15题_反转链表_Python
题目描述输入一个链表,反转链表后,输出新链表的表头。理解怎么反转? 我要找到每个结点改变每个结点的next原创 2018-09-09 23:04:29 · 1122 阅读 · 1 评论 -
剑指offer_第14题_链表中倒数第k个结点_Python
题目描述输入一个链表,输出该链表中倒数第k个结点。理解链表详解python数据结构之链表解题思路思路1确定链表种结点个数lenth倒数第k个结点就是第length-k+1个结点需要考虑代码鲁棒性 链表是否为空—头结点不存在k<=0链表长度小于kclass Solution: def FindKthToTail(self, head,...原创 2018-08-30 14:54:52 · 659 阅读 · 0 评论 -
剑指offer_第13题_调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分并保证奇数和奇数,偶数和偶数之间的相对位置不变。理解合并两个列表list与array互相转换解题思路思路1class Solution: def reOrderArray(self, array): odd =...原创 2018-08-30 09:59:20 · 622 阅读 · 5 评论 -
剑指offer_第12题_数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路思路1class Solution: def Power(self, base, exponent): return base**exponent思路2class Solution: def Power(...原创 2018-08-29 21:51:57 · 799 阅读 · 0 评论 -
剑指offer_第11题_二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。理解整数怎么转换为二进制 &amp;gt;&amp;gt;&amp;gt; bin(25)'0b11001'&amp;gt;&amp;gt;&amp;gt; bin(25).replace('0b','')'11001'什么是补码 计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号原创 2018-08-29 20:56:14 · 1054 阅读 · 0 评论 -
剑指offer_第10题_矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?理解n个2*1的小矩形 覆盖 2*n的大矩形覆盖方式:横着或者竖着本质上还是斐波那契数列问题 矩形覆盖问题分析F(0) = 0F(1) = 1F(2) = 2F(n) = F(n-1) + F(n+1) (n>2)解...原创 2018-08-29 13:57:52 · 687 阅读 · 0 评论 -
剑指offer_第9题_变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。理解真是一只变态的青蛙解题思路解题1如果是n级台阶,假设有F(n)种跳法,那一定也是先跳1级或者先跳2级……或者n-1级,或者直接跳到n级。跳1级后有F(n-1)种,跳2级后有F(n-2)种……跳n-1级有F(1)种,直接跳到n级台阶为1种,故...原创 2018-08-29 10:03:09 · 752 阅读 · 0 评论 -
剑指offer_第8题_跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)理解完全蒙啊那我们就用特例先分析一下 如果有1级台阶,那有1种 如果有2级台阶,那有2种 如果有3级台阶,那一定是先跳1级或者先跳2级,再跳到3级台阶上,跳1级后有2种,跳2级后有1种,共有3种跳法如果是n级台阶呢,假设有F(n)种跳法,那一定也...原创 2018-08-28 21:34:02 · 688 阅读 · 0 评论 -
剑指offer_第7题_斐波那契数列
题目描述现在要求输入一个整数n输出斐波那契数列的第n项(从0开始,第0项为0)。 n&lt;=39理解斐波那契数列 因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, ...原创 2018-08-28 19:53:37 · 750 阅读 · 0 评论 -
剑指offer_第6题_旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 给出的所有元素都大于0,若数组大小为0,请返回0。...原创 2018-08-28 16:30:21 · 620 阅读 · 0 评论 -
剑指offer_第5题_用两个栈实现队列
题目描述用两个栈来实现一个队列完成队列的Push和Pop操作队列中的元素为int类型理解关于栈 什么是栈栈的抽象数据类型Python实现栈关于队列 什么是队列队列抽象数据类型Python实现队列解题思路思路1栈是有序的 LIFO,也就是后进先出。队列是有序的FIFO,也就是先进先出。当然无论是栈还是队列,在Python中一般都是用...原创 2018-08-28 09:47:04 · 565 阅读 · 0 评论 -
剑指offer_第4题_重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果请重建出该二叉树 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。...原创 2018-08-27 18:17:16 · 920 阅读 · 0 评论 -
剑指offer_第3题_从尾到头打印链表
题目描述输入一个链表:按链表值从尾到头的顺序返回一个ArrayList。链表结构class ListNode: def __init__(self, x): self.val = x self.next = None理解什么是链表 python数据结构之链表解题思路思路1 读取链表中每个元素,放入list中,再倒...原创 2018-08-22 17:00:26 · 808 阅读 · 0 评论 -
剑指offer_第2题_替换空格
题目描述请实现一个函数:将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。理解如何对字符串进行替换操作 先看看字符串中有哪些方法 观察到s.replace(old,new)可以对字符串进行替换,所以自然有可我们的解题思路1解题思路思路1class Solu...原创 2018-08-22 14:50:46 · 848 阅读 · 0 评论 -
剑指offer_第1题_二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同)每一行都按照从左到右递增的顺序排序每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。理解什么是二维数组? 实际上python当中没有数组的概念, 而是列表(List), 二维列表相当于二维数组 。 python中创建二维数组import numpy a...原创 2018-08-22 14:09:24 · 1427 阅读 · 0 评论