106
题目描述:
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:你可以假设树中没有重复的元素。
示例:
解答:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
if not postorder:
return None
root=TreeNode(postorder[-1])
n=inorder.index(root.val)
root.left=self.buildTree(inorder[:n],postorder[:n])
root.right=self.buildTree(inorder[n+1:],postorder[n:-1])
return root
228
题目描述:
给定一个无重复元素的有序整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出:
“a->b” ,如果 a != b
“a” ,如果 a == b
示例:
解答:
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
res = []
start = 0
end = 0
for i in range(len(nums)):
if i + 1 < len(nums) and nums[i+1] - nums[i] == 1:
end += 1
else:
if start != end:
res.append(str(nums[start]) + "->" + str(nums[end]))
else:
res.append(str(nums[start]))
if i + 1 < len(nums) and nums[i+1] - nums[i] != 1:
start = i + 1
end = i + 1
return res
766
题目描述:
给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。
如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。
示例:
解答:
class Solution:
def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool:
#只需判断:前行中除最后一个元素外剩余的元素完全等于后行中除第一个元素外剩余的元素。
col_len=len(matrix)
row_len=len(matrix[0])
if col_len ==1 or row_len==1:
return True
for i in range(len(matrix)-1):
if matrix[i][:-1]!=matrix[i+1][1:]:
return False
return True
867
题目描述:
给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。
矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。
示例:
解答:
class Solution:
def transpose(self, matrix: List[List[int]]) -> List[List[int]]:
m=len(matrix[0])
n=len(matrix)
res=[]
for i in range(m):
x=[]
for j in range(n):
x.append(matrix[j][i])
res.append(x)
return res
1267
题目描述:
这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。
如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。
请你统计并返回能够与至少一台其他服务器进行通信的服务器的数量。
示例:
解答:
ROW, COL = len(grid), len(grid[0])
crow = [0] * ROW
ccol = [0] * COL
for i in range(ROW):
for j in range(COL):
if grid[i][j]:
crow[i] += 1
ccol[j] += 1
res = 0
for i in range(ROW):
for j in range(COL):
res += grid[i][j] and (crow[i] > 1 or ccol[j] > 1)
return res