2026年3月6日 星期五

766. Toeplitz Matrix

難度: Easy

類型: Array,Matrix 
CPP程式下載: 766.cpp

Topic:

Given an m x n matrix, return true if the matrix is Toeplitz. Otherwise, return false.

A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same elements.

 

Example 1:

Input: matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]]
Output: true
Explanation:
In the above grid, the diagonals are:
"[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]".
In each diagonal all elements are the same, so the answer is True.

Example 2:

Input: matrix = [[1,2],[2,2]]
Output: false
Explanation:
The diagonal "[1, 2]" has different elements.

 

Constraints:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 20
  • 0 <= matrix[i][j] <= 99

 

Follow up:

  • What if the matrix is stored on disk, and the memory is limited such that you can only load at most one row of the matrix into the memory at once?
  • What if the matrix is so large that you can only load up a partial row into the memory at once?
Consideration:
1. "Union of first column and first row elements".
2. Check each elements in the union from its left upper to right bottom diagonal direction. If each element's diagonal values are the same, then return true. If any different value is found, return false.
 

Code:
class Solution {
public:
    bool isToeplitzMatrix(vector<vector<int>>& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();
        //cout << "m = " << m << ", n = "<< n << "\n";
        //bool result = true;
        int i,j,k,value;
        for (k=0;k<m;k++)
        {
            j=0;
            i=k;
            value=matrix[i][j];
            i++;
            j++;
            while (j<n && i<m)
            {
                //cout << "i = " << i << ", j = "<< j << "\n";
                if (matrix[i][j]==value)
                {
                    i++;
                    j++;
                }
                else
                {
                    return false;
                }
            }
        }
        for (k=1;k<n;k++)
        {
            i=0;
            j=k;
            value=matrix[i][j];
            i++;
            j++;
            while (j<n && i<m)
            {
                //cout << "i = " << i << ", j = "<< j << "\n";
                if (matrix[i][j]==value)
                {
                    i++;
                    j++;
                }
                else
                {
                    return false;
                }
            }
        }
        return true;
    }
};

Result:
Accepted
483 / 483 testcases passed
tendchen
tendchen
submitted at Mar 06, 2026 16:18
Runtime
0ms
Beats100.00%
Memory
21.12MB
Beats28.29%