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;
        }
    }
  • 相关阅读:
    RESTful API设计指南
    Ubuntu16.04 安装openssl
    shell while循环
    linux awk
    vim与shell切换
    shell for循环
    css 固定宽度,自动换行
    php-fpm 与 cgi
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/usr/local/mysql/tmp/mysql.sock'
    linux ps 命令参数详解
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/9034309.html
Copyright © 2011-2022 走看看