「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」
[螺旋矩阵 II]
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
提示:
1 <= n <= 20
解题思路: 1.找规律题 2.同样的方法先判断特殊情况 n==1 return [[1]] 3.先生成一个表res 代表当前的四方格,然后进行填充需要的值 4.一步一步来,每次一圈进行数据处理,处理到最后生成的res就是我们想要的结果了
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
if n==1:
return [[1]]
res = [[0 for i in range(n)] for i in range(n)]
index = 1
cricle = 0
while index <= n*n:
for i in range(0+cricle,n-cricle):
res[0+cricle][i] = index
index += 1
for j in range(1+cricle,n-cricle):
res[j][n-1-cricle] = index
index += 1
for i in reversed(range(0+cricle,n-1-cricle)):
res[n-1-cricle][i] = index
index += 1
for j in reversed(range(1+cricle,n-1-cricle)):
res[j][0+cricle] = index
index += 1
cricle += 1
return res
执行结果:
[搜索二维矩阵 II]
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。 每列的元素从上到下升序排列。
示例 1:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5 输出:true 示例 2:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20 输出:false
提示:
m == matrix.length n == matrix[i].length 1 <= n, m <= 300 -109 <= matrix[i][j] <= 109 每行的所有元素从左到右升序排列 每列的所有元素从上到下升序排列 -109 <= target <= 109
解题思路: 1.对矩阵做遍历,在每一行中查找是否符合条件的数据 2.通过二分法进行提高效率查找。
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
def two_dichotomy(i):
l, n = 0, len(matrix[0])-1
while l <= n:
m = (l+n)//2
if matrix[i][m] > target:
n = m - 1
elif matrix[i][m] < target:
l = m + 1
else:
break
if matrix[i][m] == target:
return True
for i in range(len(matrix)):
if two_dichotomy(i):
return True
return False
执行结果: