題意
給你一個 m x n 的矩陣 matrix 。如果這個矩陣是托普利茨矩陣,傳回 true ;否則,傳回 false 。
如果矩陣上每一條由左上到右下的對角線上的元素都相同,那麼這個矩陣是 托普利茨矩陣 。
示例 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]” 上的元素不同。
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 20
0 <= matrix[i][j] <= 99
解題思路
這裡我們根據題意,将這個題目拆成兩個部分,一個是下三角(由每一行向右下45°分割)
第二部分,上三角(每一列向右下45°分割,不包括第一列)
這兩個部分判斷基本相同,以下三角為例
矩陣的坐标判斷,右下角相比較于左上角即橫坐标加一,縱坐标加一
目前行的一個點與之後每一行的點如果有不同的話,直接傳回false
如果都相同,轉到下一行,重複上一步驟。
代碼示範
class Solution {
public boolean isToeplitzMatrix(int[][] matrix) {
int m=matrix.length;
int n=matrix[0].length;
for(int i=0;i<m;i++)
{
int han=i+1;
int lie=1;
while (han<m&&lie<n)
{
if(matrix[han][lie]!=matrix[han-1][lie-1])
return false;
han++;
lie++;
}
}
for(int i=1;i<n;i++)
{
int lie=i+1;
int han=1;
while (han<m&&lie<n)
{
if(matrix[han][lie]!=matrix[han-1][lie-1])
return false;
han++;
lie++;
}
}
return true;
}
}
效果
info
解答成功:
執行耗時:1 ms,擊敗了100.00% 的Java使用者
記憶體消耗:38.8 MB,擊敗了11.67% 的Java使用者