剑指offer--day01
2019-07-24 09:13:28来源:博客园 阅读 ()
1.1题目:二维数组中的查找:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1.2思路:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数组,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。
1.3代码:
1 # -*- coding:utf-8 -*- 2 class Solution: 3 # array 二维列表 4 def Find(self, target, array): 5 # write code here 6 rows = len(array) 7 cols = len(array[0]) 8 9 if rows > 0 and cols > 0: 10 row = 0 11 col = cols - 1 12 while row < rows and col >= 0: 13 if target == array[row][col]: 14 return True 15 elif target < array[row][col]: 16 col -= 1 17 else: 18 row += 1 19 return False
2.1题目:替换空格:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2.2思路:建立一个新的空字符串tempstr,然后遍历输入的字符串,判断字符串中当前字符是否为空,若否,添加字符到空字符串tempstr中,若是,添加%20到空字符串tempstr中,最后返回tempstr。
2.3 代码:
1 # -*- coding:utf-8 -*- 2 class Solution: 3 # s 源字符串 4 def replaceSpace(self, s): 5 # write code here 6 tempstr = '' 7 for c in s: 8 if c == ' ': 9 tempstr += "%20" 10 else: 11 tempstr += c 12 return tempstr
3.1题目:从尾到头打印链表:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
3.2解题思路:创建一个栈,循环遍历节点并将节点的data存放到栈中,最后返回这个栈。(栈的特性:先进后出)
3.3代码:
1 # -*- coding:utf-8 -*- 2 # class ListNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution: 8 # 返回从尾部到头部的列表值序列,例如[1,2,3] 9 def printListFromTailToHead(self, listNode): 10 # write code here 11 result = [] 12 while listNode: 13 result.insert(0, listNode.val) 14 listNode = listNode.next 15 return result
4.1题目:重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
4.2解题思路:
通常树有如下几种遍历方式:
- 前序遍历:先访问根结点,再访问左子结点,最后访问右子结点。
- 中序遍历:先访问左子结点,再访问根结点,最后访问右子结点。
- 后序遍历:先访问左子结点,再访问右子结点,最后访问根结点。
本题为前序遍历和中序遍历,最少需要两种遍历方式,才能重建二叉树。
前序遍历序列中,第一个数字总是树的根结点的值。在中序遍历序列中,根结点的值在序列的中间,左子树的结点的值位于根结点的值的左边,而右子树的结点的值位于根结点的值的右边。剩下的我们可以递归来实现,具体如图:
4.3代码:
1 # -*- coding:utf-8 -*- 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 class Solution: 8 # 返回构造的TreeNode根节点 9 def reConstructBinaryTree(self, pre, tin): 10 # write code here 11 if len(pre) == 0: 12 return None 13 elif len(pre) == 1: 14 return TreeNode(pre[0]) 15 else: 16 root = TreeNode(pre[0]) 17 pos = tin.index(pre[0]) 18 root.left = self.reConstructBinaryTree(pre[1:pos+1], tin[:pos]) 19 root.right = self.reConstructBinaryTree(pre[pos+1:], tin[pos+1:]) 20 return root
牛客网刷题平台:https://www.nowcoder.com/ta/coding-interviews
参考:https://cuijiahua.com/(这位大牛的个人网站非常给力,强烈建议大家过去看看!)
原文链接:https://www.cnblogs.com/WJZheng/p/11129636.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Python基础知识 2019-07-24
- 第一章 计算机基础 2019-07-24
- Python基础(七)——文件和异常 2019-07-24
- 【第三篇】Python流程控制和运算符 2019-07-24
- 《剑指offer》面试题的Python实现 2019-06-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash