1. 程式人生 > >160、託普利茨矩陣

160、託普利茨矩陣

如果一個矩陣的每一方向由左上到右下的對角線上具有相同元素,那麼這個矩陣是託普利茨矩陣。

給定一個 M x N 的矩陣,當且僅當它是託普利茨矩陣時返回 True。

示例 1:

輸入:
matrix = [
[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。
示例 2:

輸入:
matrix = [
[1,2],
[2,2]
]
輸出: False
解釋:
對角線"[1, 2]"上的元素不同。
說明:

matrix 是一個包含整數的二維陣列。
matrix 的行數和列數均在 [1, 20]範圍內。
matrix[i][j] 包含的整數在 [0, 99]範圍內。
進階:

如果矩陣儲存在磁碟上,並且磁碟記憶體是有限的,因此一次最多隻能將一行矩陣載入到記憶體中,該怎麼辦?
如果矩陣太大以至於只能一次將部分行載入到記憶體中,該怎麼辦?

又寫了好長時間

class Solution {
    public boolean isToeplitzMatrix(int[][] matrix) {
      		if(matrix.length == 1){
			return true;
		}
		
		if(!isget(matrix, 0, 0)){
			return false;
		}
		//迴圈行,然後迴圈列
		for (int i = 1; i < matrix.length; i++) {
			if(!isget(matrix, i, 0))
				return false;
		}
		//迴圈行,然後迴圈列
				for (int i = 1; i < matrix[0].length; i++) {
					if(!isget(matrix, 0, i))
						return false;
				}
		return true;
    }
	public static boolean isget(int[][] matrix,int row,int column ){
		
		while (row < matrix.length -1 && column < matrix[row].length - 1) {
			if(matrix[row][column] != matrix[row + 1][column + 1]){
				return false;
			}else {
				row ++;
				column ++;
			}
		}
		return true;
	}
  
    }

在這裡插入圖片描述

排名靠前的程式碼

class Solution {
    public boolean isToeplitzMatrix(int[][] a) {
        for(int i=0;i<a.length-1;i++){
            for(int j=0;j<a[i].length-1;j++){
                if(a[i][j]!=a[i+1][j+1]){
                    return false;
                }
               
            }
        } return true;
    }
}