LeetCode#766 Toeplitz Matrix

1、递推每条对角线,从上至下isTm+ptr为列坐标总从0开始,行坐标ptr同;从左至右ptr行坐标,isTn+ptr列坐标。
2、注意1*n n*1也是。。。

class Solution {
public:
    bool isToeplitzMatrix(vector<vector<int>>& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();

        int isTm = 0, isTn = 0;
        if(m == 1)
            isTm = 1;
        if(n == 1)
            isTn = 1;
        if(isTm | isTn)
            return true;

        while(isTm < m-1){
            int ptr = 0;
            while(ptr < n-1 && isTm+ptr < m-1){
                if(matrix[isTm+ptr][ptr] != matrix[isTm+ptr+1][ptr+1]){
                    return false;
                }
                ptr++;
            }
            isTm++;
        }
        while(isTn < n-1){
            int ptr = 0;
            while(ptr < m-1 && isTn+ptr < n-1){
                if(matrix[ptr][isTn+ptr] != matrix[ptr+1][isTn+ptr+1]){
                    return false;
                }
                ptr++;   
            }
            isTn++;
        }

        return true;
    }
};

另一种思想是,错位数组

class Solution {
public:
    bool isToeplitzMatrix(vector<vector<int>>& matrix) {
        for(int i = 1; i < matrix.size(); i++){
             vector<int> tmp1(matrix[i-1].begin(), matrix[i-1].end()-1);
             vector<int> tmp2(matrix[i].begin()+1, matrix[i].end());
             if(tmp1 != tmp2)
                 return false;
         }
         return true;
    }
};

猜你喜欢

转载自blog.csdn.net/rpybd/article/details/81591196