leetcode-explore-learn-數據結構-數組2
- 1.簡述
- 2.例題
- 2.1 二維數組的對角線遍歷
- 2.2 螺旋遍歷
- 2.3 楊輝三角
本系列博文為leetcode-explore-learn子欄目學習筆記,如有不詳之處,請參考leetcode官網:https://leetcode-cn.com/explore/learn/card/array-and-string/198/introduction-to-array/768/
1.簡述
本文主要記錄二維數據及相關的例題
二維數組的元素排列在矩形網格中,而不是直線上
在一些語言中,二維數組內部實際是使用一維數組實現的–c++中a[i] [j]內部索引時,實際為a[i*n+j] (n為每一行元素的個數)
與一維動態數組類似,一樣可以定義二維動態數組,實際上,他可以只是一個嵌套的動態數組。
2.例題
2.1 二維數組的對角線遍歷
同一條對角線上元素下標索引和一致。
n*m的矩陣一共有n+m-1條對角線
索引和為偶數時,向上遍歷,遍歷順序是(x,0)(x-1,1),(x-2,2),…,(0,x)
索引和為奇數時,向下遍歷,遍歷順序為(0,y),(1,y-1),…,(y,0)
28/32
class Solution(object):def findDiagonalOrder(self, matrix):""":type matrix: List[List[int]]:rtype: List[int]"""if not matrix:return []hor = len(matrix)ver = len(matrix[0])leng = hor+ver-1listmatrix = []for x in range(leng+1):if x%2 ==0:for i in range(x,-1,-1):j = x-iif i<hor and j<ver:listmatrix.append(matrix[i][j])elif j>ver:continueelse:for j in range(x,-1,-1):i = x-jif i<hor and j<ver:listmatrix.append(matrix[i][j])elif j>hor:continuereturn listmatrix
參考博文:https://blog.csdn.net/qq_36022260/article/details/103651894
2.2 螺旋遍歷
leetcode 54
class Solution(object):def spiralOrder(self, matrix):""":type matrix: List[List[int]]:rtype: List[int]"""if not matrix:return []R,C=len(matrix),len(matrix[0])flag=[[False]*C for _ in matrix]res=[]dr=[0,1,0,-1] # [r+0,c+1] 表征順時針的四個方向dc=[1,0,-1,0]r,c=0,0di=0for _ in range(R*C):res.append(matrix[r][c])flag[r][c]=Truen_r,n_c=r+dr[di],c+dc[di]if 0<=n_r<R and 0<=n_c<C and not flag[n_r][n_c]:r,c=n_r,n_celse:di=(di+1)%4r,c=r+dr[di],c+dc[di]return res
2.3 楊輝三角
第i行的元素個數為i+1個,i的取值范圍為0,1,…,numRows-1
第i行元素的第一個元素(索引為0)和最后一個元素(索引為i),該行中其它元素的索引j取值范圍為0,1,…,i-1.
class Solution(object):def generate(self, c):""":type numRows: int:rtype: List[List[int]]"""res=[]for i in range(numRows):if i==0:res.append([1])elif i==1:res.append([1,1])else:res.append([1]*(i+1)) for j in range(1,i):res[i][j]=res[i-1][j-1]+res[i-1][j]return res