矩陣遍歷問題

2021-10-01 05:53:41 字數 1252 閱讀 9887

這裡記錄些常見的矩陣遍歷問題,矩陣遍歷沒有什麼簡單的方法,必須要遍歷矩陣的每個元素,因此在時間複雜度上沒有什麼簡單的方法,不過遍歷時的方式可以不同。首先看下面例題

給定乙個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。

輸入:

[[ 1, 2, 3 ],

[ 4, 5, 6 ],

[ 7, 8, 9 ]

]輸出: [1,2,3,6,9,8,7,4,5]

這道題很直觀,解法也很清楚,但是在遍歷的實現上有兩種方法,以下列出了這兩種方法。

vector<

int>

spiralorder

(vectorint>>

& matrix)

; vector<

int>dy

; vectorint>>

seen

(rows,vector<

int>

(cols,0)

);int x=

0,y=

0,dir=0;

//遍歷次數即矩陣中的每個元素都被遍歷到

for(

int i=

0;i++i)

//當沿著某個方向到達盡頭時便改變方向

else

}return res;

}

vector<

int>

spiralorder

(vectorint>>

& matrix)

return res;

}

其中方法一是最直觀的解法,但是其需要乙個輔助矩陣來記錄遍歷過的位置,方法二更加簡潔些,但是不容易想到。對該題稍加變形就成為了另一道題

給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。

輸入: 3

輸出:[

[ 1, 2, 3 ],

[ 8, 9, 4 ],

[ 7, 6, 5 ]

]

這道題與上題十分相似,甚至方法都一樣,只是在遍歷時對矩陣幅值而已。**如下

vectorint>>

generatematrix

(int n)

return res;

}

numpy矩陣遍歷

1 遍歷乙個numpy型別的矩陣 我原來一直以為和 這兩種寫法沒有區別,其實兩種效果完全不一樣,對比之後一般不建議這樣寫!coding utf 8 import numpy as np a np.array 1,2,3 4,5,6 print a.shape 2,3 print a 0 這樣寫,無論...

zigzag遍歷矩陣

按之字型遍歷乙個矩陣。之字形遍歷順序如下圖所示 處理乙個二維矩陣一定不能陷入繁瑣的細節處理中,如果此題思考方向為到了 2 後如何轉向 5,到了 5 後如何轉向 9,到了 9 後又如何轉向 6,這樣程式設計會變得異常複雜。應該抽象出子過程,本題的子過程就是遍歷矩陣斜著的一行,只不過每隔一行遍歷方向改變...

遍歷矩陣的幾種方式

class solution public vectorfinddiagonalorder vector matrix vectorres int m matrix.size if m 0 return res int n matrix 0 size int x 0,y 0 res.push bac...