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 = None
class 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 = None
class 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
本文提供四道经典编程题目解决方案,包括二维数组查找、字符串空格替换、链表逆序打印及二叉树重建,每题均附带详细解析。
&spm=1001.2101.3001.5002&articleId=77653698&d=1&t=3&u=6ad150b7611f4ea2a8e6ae97af6a435e)

被折叠的 条评论
为什么被折叠?



