zoukankan      html  css  js  c++  java
  • 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:
    1234
    5123
    9512
    
    In the above grid, the diagonals are "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]", and 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].

    Solution:

    1. 

    class Solution {
        public boolean isToeplitzMatrix(int[][] matrix) {
            if (matrix == null) {
                return true;
            }
            
            int rowSize = matrix.length, colSize = matrix[0].length;
            
            // identify the horizontal sequence 
            int i = 0;
            while (i < rowSize) {
                if (!isSame(matrix, i++, 0)) {
                    return false;
                }
            }
            
            // identify the vertical sequence
            int j = 0;
            while (j < colSize) {
                if (!isSame(matrix, 0, j++)) {
                    return false;
                }
            }
            
            return true;
        }
        
        private boolean isSame(int[][]matrix, int i, int j) {
            int rowSize = matrix.length, colSize = matrix[0].length;
            if (i >= rowSize || j >= colSize) {
                return true;
            }
            
            int benchMark = matrix[i++][j++];
            while (i < rowSize && j < colSize) {
                if (matrix[i++][j++] != benchMark) {
                    return false;
                }
            }
            
            return true;
        }
    }

    2. 

    class Solution {
        public boolean isToeplitzMatrix(int[][] matrix) {
            for (int i = 0; i < matrix.length - 1; i++) {
                for (int j = 0; j < matrix[0].length = 1; j++) {
                    if (matrix[i][j] != matrix[i + 1][j + 1]) {
                        return false;
                    }
                }
            }
            
            return true;
        }
    }
  • 相关阅读:
    Asp.net中导出Excel文档(Gridview)
    以太坊难度炸弹是什么?极大抑制矿工继续以POW方式挖矿!
    Solidity语言基础 和 Etherum ERC20合约基础
    BCH/BSV coin split troubleshooting
    比特币学习-Transaction的locktime属性
    在BCH硬分叉后防止重放攻击-2
    在BCH硬分叉后防止重放攻击-1
    区块链硬分叉-软分叉简单了解
    BTC和BCH 区别和联系?
    BCHABC/BCHSV的矛盾所在
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/9034309.html
Copyright © 2011-2022 走看看