《剑指offer》python答案整理(1)
来源:互联网 发布:淘宝联盟如何一店多购 编辑:程序博客网 时间:2024/05/22 04:30
1. 二维数组查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
# -*- coding:utf-8 -*-class Solution: # array 二维列表 def Find(self, target, array): # write code here find = False rows = len(array) columns = len(array[0]) row=0 column=columns-1 while row<rows and column>=0: if(array[row][column]==target): find = True break elif(array[row][column]>target): column-=1 else: row+=1 return find
解析:二维数组行、列分别有序,可以借鉴类似分半查找的思路。可以从二维数组的左下角或者右上角开始查找。假设从右上角开始查找,若数组值大于目标值,需向数值减小的方向查找,既向左查找;若数组值小于目标值,需要向数值增大的方向查找。
2. 替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
# -*- coding:utf-8 -*-class Solution: # s 源字符串 def replaceSpace(self, s): # write code here lenofl1 = len(s) blank=0 s=list(s) for i in range(0, lenofl1): if s[i] == ' ': blank +=1 lenofl2 = lenofl1 + 2*blank for i in range(0, lenofl2-lenofl1): s.append('') index1 = lenofl1-1 index2 = lenofl2-1 while index1>=0 and index2>index1: if s[index1] == ' ': s[index2] = '0' index2 -= 1 s[index2] = '2' index2 -= 1 s[index2] = '%' index2 -= 1 else: s[index2] = s[index1] index2 -= 1 index1 -= 1 return ''.join(s)
解析:该问题可以用python的字符串方法解决 str.replace(' ', '%20')。用更原始的方法解决解决,首先计算原始字符串的长度,根据原始字符串中空格的长度计算替换后的字符串长度。注意python中字符串是不可变类型,为了方便进行索引操作,把字符串转换为列表。分别从原始字符串末尾位置和补充后字符串末尾位置向前遍历,如果为空格,则替换,否则复制原字符,最后返回字符串。这里之所以要从后向前,是因为从前向后写入‘%20’三个字符会覆盖原字符串后面的内容。当然也可以不在原列表上进行操作,从前向后遍历原列表,在空列表上用append()方法加入相应字符元素。
3. 从尾到头打印一个链表
输入一个链表,从尾到头打印链表每个节点的值。
# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): # write code here l=[] while listNode: l.append(listNode.val) listNode = listNode.next l.reverse() return l解析:简单的将链表依次加入到列表中,然后用列表的reverse()可以实现功能。这道题还可以考虑用栈,先入后出,完成逆序打印。或者递归,先判断该节点的后继不为空,调用递归,然后打印该节点的值。
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 = Noneclass Solution: # 返回构造的TreeNode根节点 def reConstructBinaryTree(self, pre, tin): # write code here if len(pre) == 0: return None val = pre[0] for i in range(0, len(tin)): if tin[i] == val: break root = TreeNode(val) root.left = self.reConstructBinaryTree(pre[1:1+i], tin[:i]) root.right = self.reConstructBinaryTree(pre[1+i:], tin[i+1:]) return root
阅读全文
0 0
- 《剑指offer》python答案整理(1)
- 剑指Offer——Python答案
- 剑指Offer——Python答案
- 剑指Offer(java答案)
- 剑指Offer(java答案)
- 剑指offer整理归纳(1/2)
- 剑指offer题目及答案
- 剑指offer(数组、字符串)及其它答案
- 剑指offer整理归纳(2/2)
- 剑指offer编程整理(一)
- 剑指Offer编程整理(二)
- 剑指Offer编程整理(三)
- 剑指Offer编程整理(四)
- 剑指Offer编程整理(五)
- 剑指Offer编程整理(六)
- 剑指offer-算法整理
- 剑指Offer——Java答案
- 剑指Offer——Java答案
- 研究apache出品的DBUtilsResultSetHandler的子类 附带c3p0连接池
- Asp.Net Core-项目结构
- 一步一步看清动态规划----背包问题(java解)
- A
- 页面导出xml文件
- 《剑指offer》python答案整理(1)
- 2074 区间覆盖问题
- DirectShow的RTP发包(H264)Filter
- Asp.Net Core-配置
- tomcat and war 包
- mysql:登录服务器
- POJ
- 小孩报数问题
- java 基础 —— 文件操作(File)