托普利兹矩阵。
题目来源:https://leetcode.com/problems/toeplitz-matrix
题目难度:Easy
解答1[Java]:
核心思想
使用 (r, c)
表示行号和列号,r-c
相同的元素是在同一条对角线上的,可以看作同一组。使用一个 HashMap 存储每个组的值,然后依次遍历元素,根据 r-c
算出来他所在的组,然后判断其值和其所在组的值是否一致。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public boolean isToeplitzMatrix(int[][] matrix) { HashMap<Integer, Integer> groups = new HashMap<>(); for (int r = 0; r < matrix.length; ++r) { for (int c = 0; c < matrix[0].length; ++c) { if (!groups.containsKey(r - c)) groups.put(r - c, matrix[r][c]); else if (groups.get(r - c) != matrix[r][c]) return false; } } return true; } }
|
解答2[Java]:
核心思想
依次遍历元素,然后判断其值和其坐上方元素的值是都一样,如果不一样,就返回 false,如果遍历顺利完成,返回 true。判断其左上方元素的时候要确保 r > 0
和 c > 0
以保证数组不会越界。
代码
1 2 3 4 5 6 7 8 9 10 11 12
| class Solution { public boolean isToeplitzMatrix(int[][] matrix) { for (int r = 0; r < matrix.length; ++r) { for (int c = 0; c < matrix[0].length; ++c) { if (r > 0 && c > 0 && matrix[r - 1][c - 1] != matrix[r][c]) { return false; } } } return true; } }
|