LeetCode演算法題-Toeplitz Matrix(Java實現)
這是悅樂書的第312 次更新,第333 篇原創
01 看題和準備
今天介紹的是LeetCode演算法題中Easy級別的第181題(順位題號是766)。如果從左上角到右下角的每個對角線具有相同的元素,則矩陣是Toeplitz。現在給定一個M×N矩陣,當且僅當矩陣是Toeplitz時返回True。例如:
輸入:矩陣= [[1,2,3,4],[5,1,2,3],[9,5,1,2]]
輸出:true
說明:在上面的網格中,對角線是:“[9]”,“[5,5]”,“[1,1,1]”,“[2,2,2]”,“[3,3]”,“[4]”。在每個對角線中,所有元素都是相同的,因此答案是true。
輸入:矩陣= [[1,2],[2,2]]
輸出:錯誤
說明:對角線“[1,2]”具有不同的元素。
注意:
-
矩陣將是一個整數的二維陣列。
-
矩陣將具有範圍[1,20]中的多個行和列。
-
matrix [i] [j]將是範圍[0,99]中的整數。
跟進:
1、如果矩陣儲存在磁碟上,並且記憶體有限,以至於你一次只能將矩陣的最多一行載入到記憶體中,該怎麼辦?
2、如果矩陣太大而你只能一次將部分行載入到記憶體中怎麼辦?
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 解題
題目的要求是判斷對角線上的值是否都相同,所以我們直接遍歷陣列,獲取當前元素,判斷它的右下元素(行和列都加1)是否與其相等,當然也可以判斷左上方向,不等於就直接返回false。
另外,題目後面跟了兩個問題,針對第一個問題可以使用HashMap或者佇列的方式,存一次判斷一次;針對第二個問題,根據每次能載入最大行數,將其分解。
public boolean isToeplitzMatrix(int[][] matrix) { int r = matrix.length; int c = matrix[0].length; for (int i=0; i<r; i++) { for (int j=0; j<c; j++) { if (i+1<r && j+1<c && matrix[i+1][j+1] != matrix[i][j]) { return false; } } } return true; }
03 小結
演算法專題目前已日更超過五個月 ,演算法題文章181 +篇,公眾號對話方塊回覆【資料結構與演算法 】、【演算法 】、【資料結構 】中的任一關鍵詞,獲取系列文章合集。
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!