剑指offer 之 Python实现
chimuuu
https://github.com/chimuuu
展开
-
剑指offer 之 反转链表
# -*- coding:utf-8 -*-class ListNode: def __init__(self, x): self.val = x self.next = None from collections import dequeclass Solution: # 返回ListNode def ReverseLis原创 2017-07-30 09:27:15 · 360 阅读 · 0 评论 -
剑指offer 之 重建二叉树
# -*- coding:utf-8 -*-'''输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。'''class TreeNode: def __init__(self,原创 2017-07-27 20:15:44 · 333 阅读 · 0 评论 -
剑指offer 之 调整数组顺序使奇数位于偶数之前
# coding:utf-8'''输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。'''class Solution: # 初级 相对位置变化 def reOrderArray1(self, array): # write code her原创 2017-07-29 10:24:09 · 269 阅读 · 0 评论 -
剑指offer 之 输出链表的倒数第K个结点
# -*- coding:utf-8 -*-'''输入一个链表,输出该链表中倒数第k个结点。''''''如果在只希望一次遍历的情况下, 寻找倒数第k个结点, 可以设置两个指针第一个指针先往前走k-1步, 然后从第k步开始第二个指针指向头结点然后两个指针一起遍历当地一个指针指向尾节点的时候, 第二个指针正好指向倒数第k个结点推广: 寻找中间节点, 两个指针一起, 第一个指针每次走原创 2017-07-29 10:33:15 · 402 阅读 · 0 评论 -
剑指offer 之 两个栈来实现一个队列
# -*- coding:utf-8 -*-'''面试7: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 思路:压入statck1,而删除的时候先检查stack2顶是否有元素, 有则直接删除,无则把stack1的栈顶依次压入stack2,再删除stack2的栈顶元素 @author : chimuuu'''cla原创 2017-07-27 19:57:49 · 384 阅读 · 0 评论 -
剑指offer之 替换空格
# -*- coding:utf-8 -*-'''面试4:替换空格'''class Solution: # s 源字符串 def replaceSpace(self, s): # write code here return s.replace(' ', '%20')原创 2017-07-27 14:45:07 · 331 阅读 · 0 评论 -
剑指offer 之 二进制中1的个数
# -*- coding:utf-8 -*-'''面试10:二进制中1的个数思路1: 将1循环左移分别与n进行按位与运算,可得n每一位的1的个数 运算次数: 为n二进制下的位数思路2: 将n减1,再与n进行与预算,这样会把该整数最右边的一个1变0,也就是消去了一个1 这样的话,有多少个1就进行多少次操作,自然也就得出二进制下1的个数了。 运算原创 2017-08-10 14:20:08 · 270 阅读 · 0 评论 -
剑指offer 之 二叉搜索树的后序遍历序列
# coding:utf-8'''面试24:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则输出true,否则输出false。假设输入的数组的任意两个数字都互不相同。'''class Solution: def VerifySquenceOfBST(self, sequence): # write c原创 2017-08-01 14:51:32 · 353 阅读 · 0 评论 -
剑指offer 之 栈的压入、弹出序列是否对应
# -*- coding:utf-8 -*-'''面试22:输入的两个整数序列、第一个表示栈的压入顺序,判断第二个序列是不是该栈的弹出序列基本思路: (1).建立一个辅助栈,把push序列的数字依次压入辅助栈, (2).每次压入后,比较辅助栈的栈顶元素和pop序列的首元素是否相等, 相等的话, 就继续比较pop序列的下一元素和辅助栈的栈顶元素, (3).若最后辅助原创 2017-08-01 14:42:43 · 311 阅读 · 0 评论 -
剑指offer 之 字符串的全排列、全组合
# -*- coding:utf-8 -*-'''输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:递归固定第i个元素,向后'''class Solution: def P原创 2017-08-07 20:00:42 · 1046 阅读 · 0 评论 -
剑指offer 之 二叉搜索树与双向链表
# -*- coding:utf-8 -*-'''面试27:二叉树搜索与双向链表题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。 要求不能创建任何新的结点,只能调整树中结点指针的指向。 '''class TreeNode: def __init__(self, x): self.val = x self.left =原创 2017-08-07 19:54:42 · 314 阅读 · 0 评论 -
剑指offer 之 包含min函数的栈
# -*- coding:utf-8 -*-'''面试21:包含min函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 '''class Solution: def __init__(self): self.stack = [] self.stack_min = [] def push(self原创 2017-07-30 21:10:16 · 236 阅读 · 0 评论 -
剑指offer 之 顺时针打印矩阵
# -*- coding:utf-8 -*-'''面试20输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:[[ 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,1原创 2017-07-30 21:00:17 · 561 阅读 · 0 评论 -
剑指offer 之 二叉树的镜像
# -*- coding:utf-8 -*-'''题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6原创 2017-07-30 14:29:33 · 246 阅读 · 0 评论 -
剑指offer 之 树的子结构
# coding:utf-8'''面试18题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) '''class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution : def H原创 2017-07-30 14:26:01 · 267 阅读 · 0 评论 -
剑指offer 之 合并两个排序的链表
# -*- coding:utf-8 -*-'''面试题17:合并两个排序的链表输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。基本思路:递归'''class ListNode: def __init__(self, x): self.val = x self.next = Noneclass原创 2017-07-30 09:53:00 · 307 阅读 · 0 评论 -
剑指offer之 二维数组查找
# -*- coding:UTF-8 -*-# 查找字符是否在一个二维数组中# 思路:从左下角开始查找# 行数:m = len(array) -1# 列数:n = len(array[0])-1class Solution: # arrary 二维数组 def Find(self, target, array):原创 2017-07-27 14:36:25 · 322 阅读 · 0 评论