NOWCODER 劍指offer 順時針列印矩陣

2021-08-25 14:19:50 字數 2219 閱讀 3965

折騰了好久。。寫得好繁瑣。。相當於試出來的

占用記憶體:5852k

# -*- coding:utf-8 -*-

class solution:

# matrix型別為二維列表,需要返回列表

def printmatrix(self, matrix):

# write code here

if not matrix:

return

m = len(matrix)

n = len(matrix[0])

if m==1:

return matrix[0]

if n==1:

return [b[0] for b in matrix]

i = m//2

j = n//2

result =

cnt = 1

while (i and j):

if(i):

#第cnt個迴圈的行正向

result += matrix[cnt-1][cnt-1:(n-1)-cnt +1]

if j:

#第cnt個迴圈的列正向

result += [b[(n-1)-(cnt-1)] for b in matrix[cnt-1:(m-1)-cnt +1]]

#第cnt個迴圈的行負向

result += matrix[(m-1)-(cnt-1)][(n-1)-(cnt-1):cnt-1:-1]

if j:

#第cnt個迴圈的列負向

result += [b[cnt-1] for b in matrix[(m-1)-(cnt-1):cnt-1:-1]]

i -= 1

j -= 1

cnt += 1

#列為奇,且列小於等於行,再加一列

if n%2 and (not j):

result += [b[(n-1)-(cnt-1)] for b in matrix[cnt-1:(m-1)-cnt +1+1]]

return result

#行為奇,且行小於列

if m%2 and (not i):

result += matrix[cnt-1][cnt-1:(n-1)-cnt +1+1]

return result

return result

學會利用pop(),不管是一維,二維,還是在迴圈裡,都有效

第一種,每次取第一列,然後旋轉矩陣

占用記憶體:5732k

# -*- coding:utf-8 -*-

class solution:

# matrix型別為二維列表,需要返回列表

def printmatrix(self, matrix):

# write code here

def turn(mat):

if (not mat) or (not mat[0]):

return none

#m = len(mat)

n = len(mat[0])

result =

for i in range(n):

return result

res =

while (matrix and matrix[0]):

res += matrix.pop(0)

matrix = turn(matrix)

return res

另一種更簡潔的pop方法,不用每次旋轉矩陣,只需要列也pop掉即可

占用記憶體:5624k

# -*- coding:utf-8 -*-

class solution:

# matrix型別為二維列表,需要返回列表

def printmatrix(self, matrix):

# write code here

res =

while(matrix):

res += matrix.pop(0)

if(matrix and matrix[0]):

for row in matrix:

if matrix:

res += matrix.pop()[::-1]

if matrix and matrix[0]:

for row in matrix[::-1]:

return res

NOWCODER 劍指offer 樹的子結構

這個一定要想清楚匹配成功的條件,屬於子結構,必然是樹2遍歷完為空,樹1可能遍歷完了可能沒遍歷完 而剛開始需要兩棵樹都不為空,所以必須要寫乙個內部 迴圈呼叫 占用記憶體 5624k coding utf 8 class treenode def init self,x self.val x self....

劍指offer全套解答 劍指offer 1 5

1.二維陣列中的查詢 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。public class solution int n array 0 length i...

劍指offer全套解答 劍指offer 36 45

36.兩個鍊錶的第乙個公共節點 輸入兩個鍊錶,找出它們的第乙個公共結點。注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的 public class solution return p 37.數字在排序陣列 現的次數 統計乙個數字在公升序陣列 現的次數。publi...