《LeetCode零基础指南》(第八讲) 二级指针
思路:暴力查找,将行和列进行转换
解法一:暴力查找,两个for循环,进行遍历,开辟新的数组,进行存储数据,时间复杂度是O(n*n)。空间复杂度是O(n)。
class Solution:
def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]:
s=[]
for i in range(len(image)):
t=image[i][::-1]
for j in range(len(t)):
if t[j]==1:
t[j]=0
elif t[j]==0:
t[j]=1
s.append(t)
return s
解法二:代码的优化,对于时间复杂度没有提升,但是对于空间复杂度有了一个转变。因为只有零和一两种数据,所以可以对零和一取反(一减去原始数据),这样减少了空间上的新建。时间复杂度是O(n*n),空间复杂度是O(1)。
class Solution:
def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]:
s=[]
for i in range(len(image)):
t=image[i][::-1]
for j in range(len(t)):
t[j]=1-t[j] # 这里也可以使用按位运算,^1
s.append(t)
return s
解法三:根据python的特殊性,可以近一步优化代码。时间复杂度是O(n*n),同时在切片是开辟新的空间,所以空间复杂度也是O(n)。
class Solution:
def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]:
return [[i^1 for i in x[::-1]]for x in image]
# 遍历每一行,然后将每一行进行转换,转换之后与1按位运算
思路:暴力枚举
解法一:两个for循环遍历,将数组内的数据一个个赋值给另外一组数据。时间复杂度是O(m*n),空间复杂度是O(n),因为创建了一个新的数组进行存储数据。
class Solution:
def transpose(self, matrix: List[List[int]]) -> List[List[int]]:
s=[[0]*len(matrix) for i in range(len(matrix[0]))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
s[j][i]=matrix[i][j]
return s
解法二:代码的优化,本质上和解法一的代码类似
class Solution:
def transpose(self, matrix: List[List[int]]) -> List[List[int]]:
return [[matrix[i][j]for i in range(len(matrix))]for j in range(len(matrix[0]))]
思路:暴力分解
解法:创建一个新的数组,进行存放,找到跟原数组的关系进行求解。时间复杂度是O(m* n),空间复杂度是O(m*n)。
class Solution:
def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
m,n=len(mat),len(mat[0])
if m*n!=r*c:
return mat
s=[[0]*c for i in range(r)]
for i in range(m*n):
s[i//c][i%c]=mat[i//n][i%n]
return s
解法一:和第三题的解法类型。新建一个二维数组,然后进行一个个传值。时间复杂度是O(m*n),空间复杂度是O(m *n)。
class Solution:
def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]:
if m*n!=len(original):
return []
s=[[0]*n for _ in range(m)]
for i in range(len(original)):
s[i//n][i%n]=original[i]
return s
class Solution:
def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]:
m,n=len(grid),len(grid[0])
s=[grid[i][j]for i in range(m) for j in range(n)]
t=s[-(k%(m*n)):]
s=t+s
st=[[0]*n for i in range(m)]
for i in range(m*n):
st[i//n][i%n]=s[i]
return st

浙公网安备 33010602011771号