diff --git a/README.md b/README.md index 0e4dd0a..be950d7 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,7 @@ A collection of JavaScript problems and solutions for studying algorithms. - [Maximum Product of Word Lengths](src/array/maximum-product-of-word-lengths.js) - [Kth Largest Element in an Array](src/array/kth-largest-element-in-an-array.js) - [Insert Interval](src/array/insert-interval.js) +- [Toeplitz Matrix](src/array/toeplitz-matrix.js) ### Matrix diff --git a/src/array/toeplitz-matrix.js b/src/array/toeplitz-matrix.js new file mode 100644 index 0000000..1924a21 --- /dev/null +++ b/src/array/toeplitz-matrix.js @@ -0,0 +1,62 @@ +/** + * 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. + * + * Note: + * + * 1. matrix will be a 2D array of integers. + * 2. matrix will have a number of rows and columns in range [1, 20]. + * 3. matrix[i][j] will be integers in range [0, 99]. + * + * Follow up: + * + * 1. What if the matrix is stored on disk, and the memory is limited + * such that you can only load at most one row of the * matrix into the memory at once? + * 2. What if the matrix is so large that you can only load up a partial row into the memory at once? + */ + +/** + * @param {number[][]} matrix + * @return {boolean} + */ +const isToeplitzMatrix = matrix => { + for (let i = 0; i < matrix.length - 1; i++) { + for (let j = 0; j < matrix[0].length - 1; j++) { + if (matrix[i][j] !== matrix[i + 1][j + 1]) { + return false; + } + } + } + + return true; +};