天天看點

isToeplitzMatrix-托普利茨矩陣

題意

給你一個 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使用者