各位题友大家好! 今天是 @负雪明烛 坚持日更的第 29 天。今天力扣上的每日一题是「766. 托普利茨矩阵」。

解题思路

  • 解题思路:每一个位置都要跟其右下角的元素相等。

我以前做这个题的时候选择了一个笨方法:遍历每条对角线,判断每条对角线上元素是否都相等。很显然,这个做法是直接按照托普利茨矩阵定义写的,但是由于对角线比较多,导致代码比较复杂。

现在,我是这么做的:只要每个元素都跟其右下角元素相等就行了。因为这样遍历结束之后,就能保证所有对角线上的元素就都是相等的。

代码

在 Python 代码中我用了切片操作,第 $i$ 行的 $[0, N - 2]$的切片等于第 $i + 1$ 行的 $[1, N - 1]$,这样能节省代码长度。

Python, C++, Java 代码如下:

  1. class Solution:
  2. def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool:
  3. for i in range(len(matrix) - 1):
  4. if matrix[i][:-1] != matrix[i + 1][1:]:
  5. return False
  6. return True
  1. class Solution {
  2. public:
  3. bool isToeplitzMatrix(vector<vector<int>>& matrix) {
  4. for (int i = 0; i < matrix.size() - 1; ++i) {
  5. for (int j = 0; j < matrix[0].size() - 1; ++j) {
  6. if (matrix[i][j] != matrix[i + 1][j + 1])
  7. return false;
  8. }
  9. }
  10. return true;
  11. }
  12. };
  1. class Solution {
  2. public boolean isToeplitzMatrix(int[][] matrix) {
  3. for (int i = 0; i < matrix.length - 1; ++i) {
  4. for (int j = 0; j < matrix[0].length - 1; ++j) {
  5. if (matrix[i][j] != matrix[i + 1][j + 1])
  6. return false;
  7. }
  8. }
  9. return true;
  10. }
  11. }

刷题心得

  • 每次做题都会有新体会,坚持刷题,就一定会有收获。
    - 多看看别人的优秀题解,能学到很多东西。

OK,以上就是 @负雪明烛 写的今天题解的全部内容了,如果你觉得有帮助的话,求赞、求关注、求收藏。如果有疑问的话,请在下面评论,我会及时解答。

关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。

欢迎关注我的公众号:「每日算法题」。

祝大家牛年大吉!AC 多多,Offer 多多!我们明天再见!