Find if given matrix is Toeplitz or not
Last Updated :
02 May, 2025
Given a square matrix mat[][] of order n, your task is to check if it is a Toeplitz Matrix.
Note: A Toeplitz matrix - also called a diagonal-constant matrix - is a matrix where elements of every individual descending diagonal are same from left to right. Equivalently, for any entry mat[i][j], it is same as mat[i-1][j-1] or mat[i-2][j-2] and son on.
Examples:
Input: mat[][] = [ [6, 7, 8],
[4, 6, 7]
[1, 4, 6] ]
Output: Yes
Explanation: All the diagonals of the given matrix are [6, 6, 6], [7, 7], [8], [4, 4], [1]. For every diagonal, as all the elements are same, the given matrix is Toeplitz Matrix.
Input: mat[][] = [ [6, 3, 8],
[4, 9, 7]
[1, 4, 6] ]
Output: No
Explanation: The primary diagonal elements of the given matrix are [6, 9, 6]. As the diagonal elements are not same, the given matrix is not Toeplitz Matrix.
[Expected Approach - 1] - Checking Each Diagonal - O(n * n) Time and O(1) Space
The idea is to traverse every downward-sloping diagonal in the matrix by using each element in the first row and each element in the first column as a starting point, and verify that every element along that diagonal matches the value at its head.
Follow the below given steps:
- Let
n = mat.size()
and m = mat[0].size()
. - For each column index
i
from 0
to m - 1
, call checkDiagonal(mat, 0, i)
; if it returns false, immediately return false from isToeplitz
. - For each row index
i
from 0
to n - 1
, call checkDiagonal(mat, i, 0)
; if it returns false, immediately return false from isToeplitz
. - If all calls to
checkDiagonal
succeed, return true. - In
checkDiagonal(mat, x, y)
, compare mat[i][j]
to mat[x][y]
for each i = x+1, j = y+1
while i < n && j < m
; return false on the first mismatch, otherwise return true after reaching the edge.
Below is given the implementation:
C++
#include <bits/stdc++.h>
using namespace std;
// function to check if diagonal elements are same
bool checkDiagonal(vector<vector<int>> &mat, int x, int y) {
int n = mat.size(), m = mat[0].size();
for(int i = x + 1, j = y + 1;
i < n && j < m; i++, j++) {
if(mat[i][j] != mat[x][y])
return false;
}
return true;
}
// Function to check whether given
// matrix is toeplitz matrix or not
bool isToeplitz(vector<vector<int>> &mat) {
int n = mat.size(), m = mat[0].size();
// check each descending diagonal starting from
// first row and first column of the matrix
for(int i = 0; i < m; i++)
if(!checkDiagonal(mat, 0, i))
return false;
for(int i = 0; i < n; i++)
if(!checkDiagonal(mat, i, 0))
return false;
// if all diagonals are same, return true
return true;
}
int main() {
vector<vector<int>> mat = {
{6, 7, 8},
{4, 6, 7},
{1, 4, 6}
};
if(isToeplitz(mat)) {
cout << "Yes";
} else {
cout << "No";
}
return 0;
}
Java
import java.util.*;
class GfG {
// function to check if diagonal elements are same
static boolean checkDiagonal(List<List<Integer>> mat, int x, int y) {
int n = mat.size(), m = mat.get(0).size();
for(int i = x + 1, j = y + 1;
i < n && j < m; i++, j++) {
if(!mat.get(i).get(j).equals(mat.get(x).get(y)))
return false;
}
return true;
}
// Function to check whether given
// matrix is toeplitz matrix or not
static boolean isToeplitz(List<List<Integer>> mat) {
int n = mat.size(), m = mat.get(0).size();
// check each descending diagonal starting from
// first row and first column of the matrix
for(int i = 0; i < m; i++)
if(!checkDiagonal(mat, 0, i))
return false;
for(int i = 0; i < n; i++)
if(!checkDiagonal(mat, i, 0))
return false;
// if all diagonals are same, return true
return true;
}
public static void main(String[] args) {
List<List<Integer>> mat = Arrays.asList(
Arrays.asList(6, 7, 8),
Arrays.asList(4, 6, 7),
Arrays.asList(1, 4, 6)
);
if(isToeplitz(mat)) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
Python
# function to check if diagonal elements are same
def checkDiagonal(mat, x, y):
n, m = len(mat), len(mat[0])
i, j = x + 1, y + 1
while i < n and j < m:
if mat[i][j] != mat[x][y]:
return False
i += 1
j += 1
return True
# Function to check whether given
# matrix is toeplitz matrix or not
def isToeplitz(mat):
n, m = len(mat), len(mat[0])
# check each descending diagonal starting from
# first row and first column of the matrix
for i in range(m):
if not checkDiagonal(mat, 0, i):
return False
for i in range(n):
if not checkDiagonal(mat, i, 0):
return False
# if all diagonals are same, return true
return True
mat = [
[6, 7, 8],
[4, 6, 7],
[1, 4, 6]
]
if isToeplitz(mat):
print("Yes")
else:
print("No")
C#
using System;
using System.Collections.Generic;
class GfG {
// function to check if diagonal elements are same
static bool checkDiagonal(List<List<int>> mat, int x, int y) {
int n = mat.Count, m = mat[0].Count;
for(int i = x + 1, j = y + 1;
i < n && j < m; i++, j++) {
if(mat[i][j] != mat[x][y])
return false;
}
return true;
}
// Function to check whether given
// matrix is toeplitz matrix or not
static bool isToeplitz(List<List<int>> mat) {
int n = mat.Count, m = mat[0].Count;
// check each descending diagonal starting from
// first row and first column of the matrix
for(int i = 0; i < m; i++)
if(!checkDiagonal(mat, 0, i))
return false;
for(int i = 0; i < n; i++)
if(!checkDiagonal(mat, i, 0))
return false;
// if all diagonals are same, return true
return true;
}
static void Main() {
var mat = new List<List<int>> {
new List<int> {6, 7, 8},
new List<int> {4, 6, 7},
new List<int> {1, 4, 6}
};
if(isToeplitz(mat)) {
Console.WriteLine("Yes");
} else {
Console.WriteLine("No");
}
}
}
JavaScript
// function to check if diagonal elements are same
function checkDiagonal(mat, x, y) {
let n = mat.length, m = mat[0].length;
for(let i = x + 1, j = y + 1;
i < n && j < m; i++, j++) {
if(mat[i][j] !== mat[x][y])
return false;
}
return true;
}
// Function to check whether given
// matrix is toeplitz matrix or not
function isToeplitz(mat) {
let n = mat.length, m = mat[0].length;
// check each descending diagonal starting from
// first row and first column of the matrix
for(let i = 0; i < m; i++)
if(!checkDiagonal(mat, 0, i))
return false;
for(let i = 0; i < n; i++)
if(!checkDiagonal(mat, i, 0))
return false;
// if all diagonals are same, return true
return true;
}
let mat = [
[6, 7, 8],
[4, 6, 7],
[1, 4, 6]
];
if(isToeplitz(mat)) {
console.log("Yes");
} else {
console.log("No");
}
[Expected Approach - 2] - Checking Diagonally Above Element - O(n * n) Time and O(1) Space
The idea is to scan every cell from the second row and second column onward, comparing each value to its top-left neighbor. If any element differs from the one diagonally above it, you’ve found a violation of the Toeplitz property and can stop immediately; if you make it through the entire matrix without mismatch, every diagonal is constant.
Follow the below given steps:
- Let
n = mat.size()
and m = mat[0].size()
. - Iterate
i
from 1 to n - 1
and within that j
from 1 to m - 1
. - If
mat[i][j] != mat[i - 1][j - 1]
at any point, return false
. - Once all pairs have been checked with no mismatches, return
true
.
Below is given the implementation:
C++
#include <bits/stdc++.h>
using namespace std;
// Function to check whether given
// matrix is toeplitz matrix or not
bool isToeplitz(vector<vector<int>> &mat) {
int n = mat.size(), m = mat[0].size();
// check diagonally above element of
// each element in the matrix
for(int i = 1; i < n; i++) {
for(int j = 1; j < m; j++) {
if(mat[i][j] != mat[i - 1][j - 1])
return false;
}
}
// if all diagonals are same, return true
return true;
}
int main() {
vector<vector<int>> mat = {
{6, 7, 8},
{4, 6, 7},
{1, 4, 6}
};
if(isToeplitz(mat)) {
cout << "Yes";
} else {
cout << "No";
}
return 0;
}
Java
import java.util.*;
class GfG {
// Function to check whether given
// matrix is toeplitz matrix or not
static boolean isToeplitz(List<List<Integer>> mat) {
int n = mat.size(), m = mat.get(0).size();
// check diagonally above element of
// each element in the matrix
for(int i = 1; i < n; i++) {
for(int j = 1; j < m; j++) {
if(mat.get(i).get(j) != mat.get(i - 1).get(j - 1))
return false;
}
}
// if all diagonals are same, return true
return true;
}
public static void main(String[] args) {
List<List<Integer>> mat = Arrays.asList(
Arrays.asList(6, 7, 8),
Arrays.asList(4, 6, 7),
Arrays.asList(1, 4, 6)
);
if(isToeplitz(mat)) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
Python
# Function to check whether given
# matrix is toeplitz matrix or not
def isToeplitz(mat):
n, m = len(mat), len(mat[0])
# check diagonally above element of
# each element in the matrix
for i in range(1, n):
for j in range(1, m):
if mat[i][j] != mat[i - 1][j - 1]:
return False
# if all diagonals are same, return true
return True
mat = [
[6, 7, 8],
[4, 6, 7],
[1, 4, 6]
]
if isToeplitz(mat):
print("Yes")
else:
print("No")
C#
using System;
using System.Collections.Generic;
class GfG {
// Function to check whether given
// matrix is toeplitz matrix or not
static bool isToeplitz(List<List<int>> mat) {
int n = mat.Count, m = mat[0].Count;
// check diagonally above element of
// each element in the matrix
for(int i = 1; i < n; i++) {
for(int j = 1; j < m; j++) {
if(mat[i][j] != mat[i - 1][j - 1])
return false;
}
}
// if all diagonals are same, return true
return true;
}
static void Main() {
var mat = new List<List<int>> {
new List<int> {6, 7, 8},
new List<int> {4, 6, 7},
new List<int> {1, 4, 6}
};
if(isToeplitz(mat)) {
Console.WriteLine("Yes");
} else {
Console.WriteLine("No");
}
}
}
JavaScript
// Function to check whether given
// matrix is toeplitz matrix or not
function isToeplitz(mat) {
let n = mat.length, m = mat[0].length;
// check diagonally above element of
// each element in the matrix
for(let i = 1; i < n; i++) {
for(let j = 1; j < m; j++) {
if(mat[i][j] !== mat[i - 1][j - 1])
return false;
}
}
// if all diagonals are same, return true
return true;
}
let mat = [
[6, 7, 8],
[4, 6, 7],
[1, 4, 6]
];
if(isToeplitz(mat)) {
console.log("Yes");
} else {
console.log("No");
}
[Alternate Approach] - Using Hashing - O(n * n) Time and O(n) Space
The idea is to assign a unique identifier to each down‑right diagonal (the row index minus the column index) and use a hash map to record the first value seen for that diagonal. As you scan the entire matrix, you compute this key for each cell and either verify it matches the stored value or, if it’s new, store it. A single mismatch lets you bail out with false; otherwise you conclude true at the end.
Follow the below given steps:
- Determine the matrix dimensions (row count and column count) from
mat
. - Create an empty hashmap
mp
to map each diagonal key to its representative value. - Walk through every cell in
mat
by its row index i
and column index j
. - For each cell, form the diagonal key by subtracting
j
from i
. - If
mp
already holds this key, compare the current element to the stored value; if they differ, return false immediately. - If the key is not yet in
mp
, record the current element under that key. - If you complete the traversal without any mismatch, return true.
Illustration:
The diagram below gives a better visualization of this idea. Consider the diagonal coloured yellow. The difference between x-value and y-value of any index on this diagonal is 2 (2-0, 3-1, 4-2, 5-3). Same can be observed for all body diagonals.

For red-coloured diagonal, difference is 3. For green-coloured diagonal, difference is 0. For orange-coloured diagonal, difference is -2 and so on...
Below is given the implementation:
C++
#include <bits/stdc++.h>
using namespace std;
// Function to check whether given
// matrix is toeplitz matrix or not
bool isToeplitz(vector<vector<int>> &mat) {
int n = mat.size(), m = mat[0].size();
// HashMap to store key,value pairs
unordered_map<int, int> mp;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
int key = i - j;
// If key value exists in the hashmap,
if (mp[key]) {
// check if the value is same
// as the current element
if (mp[key] != mat[i][j])
return false;
}
// Else we put key,value pair in hashmap
else {
mp[i - j] = mat[i][j];
}
}
}
return true;
}
int main() {
vector<vector<int>> mat = {
{6, 7, 8},
{4, 6, 7},
{1, 4, 6}
};
if(isToeplitz(mat)) {
cout << "Yes";
} else {
cout << "No";
}
return 0;
}
Java
// JAVA program to check whether given matrix
// is a Toeplitz matrix or not
import java.util.*;
class GFG {
static boolean isToeplitz(int[][] matrix)
{
// row = number of rows
// col = number of columns
int row = matrix.length;
int col = matrix[0].length;
// HashMap to store key,value pairs
HashMap<Integer, Integer> map
= new HashMap<Integer, Integer>();
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
int key = i - j;
// if key value exists in the hashmap,
if (map.containsKey(key))
{
// we check whether the current value
// stored in this key matches to element
// at current index or not. If not,
// return false
if (map.get(key) != matrix[i][j])
return false;
}
// else we put key,value pair in hashmap
else {
map.put(i - j, matrix[i][j]);
}
}
}
return true;
}
// Driver Code
public static void main(String[] args)
{
int[][] matrix = { { 12, 23, -32 },
{ -20, 12, 23 },
{ 56, -20, 12 },
{ 38, 56, -20 } };
// Function call
String result = (isToeplitz(matrix)) ? "Yes" : "No";
System.out.println(result);
}
}
Python
# Python3 program to check whether given matrix
# is a Toeplitz matrix or not
def isToeplitz(matrix):
# row = number of rows
# col = number of columns
row = len(matrix)
col = len(matrix[0])
# dictionary to store key,value pairs
map = {}
for i in range(row):
for j in range(col):
key = i-j
# if key value exists in the map,
if (key in map):
# we check whether the current value stored
# in this key matches to element at current
# index or not. If not, return false
if (map[key] != matrix[i][j]):
return False
# else we put key,value pair in map
else:
map[key] = matrix[i][j]
return True
# Driver Code
if __name__ == "__main__":
matrix = [[12, 23, -32], [-20, 12, 23], [56, -20, 12], [38, 56, -20]]
# Function call
if (isToeplitz(matrix)):
print("Yes")
else:
print("No")
C#
using System;
using System.Collections.Generic;
class GfG {
// Function to check whether given
// matrix is toeplitz matrix or not
static bool isToeplitz(List<List<int>> mat) {
int n = mat.Count, m = mat[0].Count;
// HashMap to store key,value pairs
Dictionary<int,int> mp = new Dictionary<int,int>();
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
int key = i - j;
// If key value exists in the hashmap,
if (mp.ContainsKey(key)) {
// check if the value is same
// as the current element
if (mp[key] != mat[i][j])
return false;
}
// Else we put key,value pair in hashmap
else {
mp[i - j] = mat[i][j];
}
}
}
return true;
}
static void Main() {
var mat = new List<List<int>> {
new List<int> {6, 7, 8},
new List<int> {4, 6, 7},
new List<int> {1, 4, 6}
};
if(isToeplitz(mat)) {
Console.WriteLine("Yes");
} else {
Console.WriteLine("No");
}
}
}
JavaScript
// Function to check whether given
// matrix is toeplitz matrix or not
function isToeplitz(mat) {
let n = mat.length, m = mat[0].length;
// HashMap to store key,value pairs
const mp = new Map();
for(let i = 0; i < n; i++) {
for(let j = 0; j < m; j++) {
let key = i - j;
// If key value exists in the hashmap,
if (mp.has(key)) {
// check if the value is same
// as the current element
if (mp.get(key) !== mat[i][j])
return false;
}
// Else we put key,value pair in hashmap
else {
mp.set(i - j, mat[i][j]);
}
}
}
return true;
}
let mat = [
[6, 7, 8],
[4, 6, 7],
[1, 4, 6]
];
if(isToeplitz(mat)) {
console.log("Yes");
} else {
console.log("No");
}
Similar Reads
Check if a given matrix is Hankel or not Given a matrix m[][] of size n x n. The task is to check whether given matrix is Hankel Matrix or not.In linear algebra, a Hankel matrix (or catalecticant matrix), named after Hermann Hankel, is a square matrix in which each ascending skew-diagonal from left to right is constant. Examples: Input: n
7 min read
Check whether the given Matrix is balanced or not Given a matrix mat[][] of dimensions NxM, the task is to check whether the given matrix is balanced or not. Print âBalancedâ if it is a balanced matrix else print âUnbalancedâ. A matrix is balanced if all cells in the matrix are balanced and a cell of the matrix is balanced if the number of cells in
8 min read
Check given matrix is magic square or not Given a matrix, check whether it's Magic Square or not. A Magic Square is a n x n matrix of the distinct elements from 1 to n2 where the sum of any row, column, or diagonal is always equal to the same number. Examples: Input : n = 3 2 7 6 9 5 1 4 3 8 Output : Magic matrix Explanation:In matrix sum o
9 min read
Check if a Matrix is Bitonic or not Given a matrix m[][], the task is to check if the given matrix is Bitonic or not. If the given matrix is Bitonic, then print YES. Otherwise, print NO. If all the rows and the columns of the given matrix have elements in one of the following orders: Strictly increasingStrictly decreasingStrictly incr
8 min read
Check if a Matrix is Reverse Bitonic or Not Given a matrix m[][], the task is to check if the given matrix is Reverse Bitonic or not. If the given matrix is Reverse Bitonic, then print Yes. Otherwise, print No. If all the rows and the columns of the given matrix have elements in one of the following orders: Strictly increasingStrictly decreas
9 min read
Check if given matrix is Zero Division matrix Given an NxN square matrix M[][]. The task is to check whether the matrix M is a zero division matrix or not. A matrix is said to be a zero division matrix only if the 2 or more results of floor division of the product of column-wise element to the product of row-wise element is zero. Examples: Inpu
8 min read
Program to check if matrix is singular or not A matrix is said to be singular if the determinant of the matrix is 0 otherwise it is non-singular .Examples: Input : 0 0 0 4 5 6 1 2 3Output : YesDeterminant value of the matrix is0 (Note first row is 0)Input : 1 0 0 4 5 6 1 2 3Output : NoDeterminant value of the matrix is 3(which is non-zero).Firs
8 min read
Program to check if a matrix is Binary matrix or not Given a matrix, the task is to check if that matrix is a Binary Matrix. A Binary Matrix is a matrix in which all the elements are either 0 or 1. It is also called Logical Matrix, Boolean Matrix, Relation Matrix. Examples: Input: {{1, 0, 1, 1}, {0, 1, 0, 1} {1, 1, 1, 0}} Output: Yes Input: {{1, 0, 1,
5 min read
Find the original matrix from the given AND matrix Given a binary matrix B[][] of size N*M, the task is to find a matrix A[][] of the same size such that B[i][j] is the bitwise AND of all the elements in ith row and jth column of A[][]. Examples: Input: B[][] = { {1, 0, 1}, {0, 0, 0} }Output: { {1, 1, 1}, {1, 0, 1} }Explanation:1 1 1 ? 1 0 11 0 1 0
10 min read
Program to check if a matrix is symmetric A square matrix is said to be symmetric matrix if the transpose of the matrix is same as the given matrix. Symmetric matrix can be obtain by changing row to column and column to row. Examples: Input : 1 2 3 2 1 4 3 4 3 Output : Yes Input : 3 5 8 3 4 7 8 5 3 Output : No A Simple solution is to do fol
8 min read