アルゴリズム(4)-leetcode-explore-learn-データ構造-配列2
15842 ワード
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.簡単に述べる
本文は主に2次元データと関連する例題を記録する.
2 D配列の要素は、直線ではなく長方形のメッシュに配置されます.
いくつかの言語では、2次元配列内部が実際に1次元配列を使用して実装されている–c++のa[i][j]内部インデックスの場合、実際にはa[i*n+j](nは各行の要素の個数)
1 Dダイナミック配列と同様に2 Dダイナミック配列を定義できますが、実際にはネストされたダイナミック配列にすぎません.
2.例題
2.1 2 D配列の対角線遍歴
同じ対角線上の要素の下付きインデックスと一致します.n*mの行列は全部でn+m-1本の対角線インデックスと偶数の場合、上へ遍歴し、遍歴順は(x,0)(x-1,1),(x-2,2),…,(0,x)インデックスと奇数の場合、下へ遍歴し、遍歴順は(0,y),(1,y-1),…,(y,0)28/32である
参考文献:https://blog.csdn.net/qq_36022260/article/details/103651894
2.2螺旋遍歴
leetcode 54
2.3楊輝三角
i行目の要素数はi+1個、iの値範囲は0,1,...,numRows-1 i行目の要素の最初の要素(インデックスは0)と最後の要素(インデックスはi)であり、この行の他の要素のインデックスjの値範囲は0,1,...,i-1である.
1.簡単に述べる
本文は主に2次元データと関連する例題を記録する.
2 D配列の要素は、直線ではなく長方形のメッシュに配置されます.
いくつかの言語では、2次元配列内部が実際に1次元配列を使用して実装されている–c++のa[i][j]内部インデックスの場合、実際にはa[i*n+j](nは各行の要素の個数)
1 Dダイナミック配列と同様に2 Dダイナミック配列を定義できますが、実際にはネストされたダイナミック配列にすぎません.
2.例題
2.1 2 D配列の対角線遍歴
同じ対角線上の要素の下付きインデックスと一致します.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-1
listmatrix = []
for x in range(leng+1):
if x%2 ==0:
for i in range(x,-1,-1):
j = x-i
if i<hor and j<ver:
listmatrix.append(matrix[i][j])
elif j>ver:
continue
else:
for j in range(x,-1,-1):
i = x-j
if i<hor and j<ver:
listmatrix.append(matrix[i][j])
elif j>hor:
continue
return 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,0
di=0
for _ in range(R*C):
res.append(matrix[r][c])
flag[r][c]=True
n_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_c
else:
di=(di+1)%4
r,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