【LeetCode】766. 托普利茨矩阵

题目链接:https://leetcode-cn.com/problems/toeplitz-matrix/

(BFS写魔怔了,看啥都想用BFS解决,这题其实只需要简单遍历即可,当然用BFS也没问题)

【LeetCode】766. 托普利茨矩阵

方法一:BFS

由于题目要求矩阵上每一条由左上到右下的对角线上的元素都相同,所以可以使用BFS从右上角的元素开始搜索,每次访问其左边和下面的元素,对比这些元素,如果这些元素没有全部相同,那么这个矩阵一定不是题目要求的托普利茨矩阵。如果全部相同,再将这些元素进行BFS搜索,持续进行相同的步骤即可。如果最后BFS的队列为空,那么自然可以确定这个矩阵是一个托普利茨矩阵。

代码(C++)

class Solution {
public:
    bool isToeplitzMatrix(vector<vector<int>>& matrix) {
        int dir[2][2] = {
                {1, 0},
                {0, -1}
        };
        int m = matrix.size() ;
        int n = matrix[0].size() ;
        vector<vector<bool> > tag(m, vector<bool >(n, false)) ;
        queue<pair<int, int> > q ;
        q.emplace(make_pair(0, n - 1)) ;
        tag[0][n - 1] = true ;
        while (! q.empty()) {
            int num = -1 ;
            int size = q.size() ;
            for (int i = 0;i < size;i++) {
                pair<int, int> p = q.front() ;
                q.pop() ;
                for (auto& i : dir) {
                    int next_x = p.first + i[0] ;
                    int next_y = p.second + i[1] ;
                    if (next_x >= 0 && next_x < m && next_y >= 0 && next_y < n && tag[next_x][next_y] == false ) {
                        tag[next_x][next_y] = true ;
                        if (num == -1) num = matrix[next_x][next_y] ;
                        else {
                            if (matrix[next_x][next_y] != num) {
                                return false ;
                            }
                        }
                        q.emplace(make_pair(next_x, next_y)) ;
                    }
                }
            }
        }
        return  true;
    }
};

方法二:遍历

从左到右,从上到下遍历矩阵中的元素,每次遍历,对于一个元素,只需要检查该元素与其右下方的元素是否相同,一旦有一个元素与其右下方的元素不同,那么这个矩阵一定不是托普利茨矩阵。

代码(C++)

class Solution {
public:
    bool isToeplitzMatrix(vector<vector<int>>& matrix) {
        int m = matrix.size() ;
        int n = matrix[0].size() ;
        for (int i = 0;i < m - 1;i++) {
            for (int j = 0;j < n - 1;j++) {
                if (matrix[i][j] != matrix[i + 1][j + 1]) return false ;
            }
        }
        return true ;
    }
};
上一篇:Webbench的使用


下一篇:Leetcode 766 托普利茨矩阵