leetcode刷題 對角線遍歷

2021-10-07 21:59:28 字數 1842 閱讀 1936

給定二維陣列,然後按照對角線折返遍歷。

通過大量的ifelse對情況進行分類,最無腦的做法:

class solution 

;int col = matrix[0]

.size()

; vector<

int> diagonal;

if(row ==1)

return diagonal;}if

(col ==1)

return diagonal;

}int i =

0, j =0;

int upordown =0;

diagonal.

push_back

(matrix[0]

[0])

;while

(i < row -

1|| j < col -1)

else

}else

if(j == col -1)

else

}else

if(i !=

0&& j ==

0&& i != row -1)

else

}else

if(i == row -

1&& j != col -1)

else

}else

else

} diagonal.

push_back

(matrix[i]

[j]);}

return diagonal;}}

;

1.每一趟對角線中元素的座標(x, y)相加的和是遞增的。

2.每一趟都是 x 或 y 其中乙個從大到小(每次-1),另乙個從小到大(每次+1)。

3.確定初始值。例如這一趟是 x 從大到小, x 盡量取最大,當初始值超過 x 的上限時,不足的部分加到 y 上面。

4.確定結束值。例如這一趟是 x 從大到小,這一趟結束的判斷是, x 減到 0 或者 y 加到上限。

5.這一趟是 x 從大到小,那麼下一趟是 y 從大到小,迴圈進行。 並且方向相反時,邏輯處理是一樣的,除了x,y和他們各自的上限值是相反的。

class solution 

;int col = matrix[0]

.size()

; vector<

int> diagonal;

bool upordown = true;

for(

int i =

0; i < row + col; i++

) upordown =

!upordown;

}return diagonal;}}

;

自己的**:

class solution 

;int col = matrix[0]

.size()

;if(col ==0)

return

; vector<

int> diagonal;

bool upordown = true;

//true=up

for(

int i =

0; i < row + col -

1; i++

) i++

; y =

(i >

(col-1)

)? col-

1: i;

x = i - y;

//while (y >= 0 && x <= row - 1)

//i++;

}return diagonal;}}

;

對角線遍歷

給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。1 索引和為偶數 元素在第一行,往右走 元素在最後一列,往下走 其他情況,往右上走 2 索引和為奇數 元素在第一列,往下走 元素在最後一行,往右走 其他情況,往左下走 clas...

leetcode 對角線遍歷(js實現)

給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。示例 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,4,7,5,3,6,8,9 解釋 兩種移動方向 處理上下左右編輯問題 越界即轉彎 param matrix ret...

golang 對角線遍歷

給定乙個含有 m x n 個元素的矩陣 m 行,n 列 請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。示例 輸入 1,2,3 4,5,6 7,8,9 輸出 1 確定總劃線次數,m n 1 記錄每道線起點座標 根據起始點座標推算出該線上的所有元素 根據奇偶性決定線元素是否需要翻轉...