我正在嘗試解決以下算法,但卡住了。我希望你能幫忙。通過給出:大小為 N*N 的主矩陣大小為 K*L 的內矩陣(內矩陣包含在主矩陣中,索引已給出)。我應該編寫一個函數,返回內部矩陣外層所有元素的列表。如果沒有元素,則返回一個空列表。在每次迭代中,內層矩陣的大小越來越大,包括之前的內層矩陣+外層。例如:通過給定黑色主矩陣和紅色內矩陣,返回黃色標記的元素。繼續直到返回一個空列表。我被困在哪里通過增加內部矩陣的范圍 +1 并比較主矩陣和內部矩陣的邊緣,我可以輕松找到外層的元素。但是,我卡住了如何一般地增加循環(增加層數)。順便說一句,我試圖避免遞歸解決方案。
1 回答

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
如果我正確理解了您的問題,您可以簡單地分別跟蹤內部矩陣 (y1, x1) 和 (y2, x2) 左上角和右下角的坐標。然后,您可以輕松獲得外層并擴展內部矩陣,如下所示:
獲取外層:這些元素的坐標是
(y1-1, j) for j in max(0, x1-1),...,min(N-1, x2+1) (頂行,如果 y1 > 0)
(y2+1, j) for j in max(0, x1-1),...,min(N-1, x2+1) (底行,如果 y2 < N-1)
(i, x1-1) for i in y1,...,y2(左列,如果 x1 > 0)
(i, x2+1) for i in y1,...,y2(右列,如果 x2 < N-1)
擴展內部矩陣:你只需要更新角坐標
y1 = max(0, y1-1), x1 = max(0, x1-1)
y2 = min(N-1, y2+1), x2 = min(N-1, x2+1)
然后重復,直到 (y1, x1) == (0, 0) 和 (y2, x2) == (N-1, N-1)
添加回答
舉報
0/150
提交
取消