1. 程式人生 > >Leetcode刷題記錄——766. Toeplitz Matrix

Leetcode刷題記錄——766. Toeplitz Matrix

  • 題目

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

Now given an M x N matrix, return True if and only if the matrix is Toeplitz.  

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.
  • 題目大意&解題思路

這道題是給你一個矩陣讓你判斷該矩陣其對角線上的元素是否都相同。

開始用的是笨方法,直腦筋,就是從最底下的對角線依次判斷。結果時間很久。

  • 方法一

bool isToeplitzMatrix(vector<vector<int>>& matrix) {
        
        int col = matrix[0].size();
        int row = matrix.size();
        
        int i = row - 1;        /*確定起始位置*/
        int j = 0;
        
        for(int n = 0; n < row+col-1; ++n ){    /*確定對角線數量*/
            
            vector<int>  temp_v;
            
            int temp_i = i;
            int temp_j = j;
            
            for( ; i < row && j < col; i++, j++ ){    /*將對角線上的元素插入陣列中*/
                
                temp_v.push_back(matrix[i][j]);
            }
            
            i = temp_i;    /*將i和j恢復到迴圈前*/
            j = temp_j;
            
            sort(temp_v.begin(), temp_v.end());        /*排序然後判斷其是否相同*/
            
            if( temp_v.front() != temp_v.back() )
                return false;
            
            if( i > 0 && j == 0 )    /*確定下一個對角線的起始位置*/
                i--;
            else if( i == 0 )
                j++;
            
        }
        
        return true;
        
    }
  •  結果一

  • 方法二

其實可以遍歷[m*n]矩陣中的[m-1,n-1]行矩陣,每次遍歷到一個位置(x,y)判斷其與(x+1,y+1)位置元素是否相等,不想等則返回false。

    bool isToeplitzMatrix(vector<vector<int>>& matrix) {
 
        int row = matrix.size();
        int col = matrix[0].size();
  
        for( int i = 0; i < row - 1; ++i ){    /*遍歷row-2 col-2行的矩陣*/
            for( int j = 0; j < col - 1; ++j ){
                if( matrix[i+1][j+1] != matrix[i][j] )
                    return false;
            }
       
        }
        return true;
    }
  • 實驗結果二