• 1582. Special Positions in a Binary Matrix


    Given a rows x cols matrix mat, where mat[i][j] is either 0 or 1, return the number of special positions in mat.

    A position (i,j) is called special if mat[i][j] == 1 and all other elements in row i and column j are 0 (rows and columns are 0-indexed).

    Example 1:

    Input: mat = [[1,0,0],
                  [0,0,1],
                  [1,0,0]]
    Output: 1
    Explanation: (1,2) is a special position because mat[1][2] == 1 and all other elements in row 1 and column 2 are 0.
    

    Example 2:

    Input: mat = [[1,0,0],
                  [0,1,0],
                  [0,0,1]]
    Output: 3
    Explanation: (0,0), (1,1) and (2,2) are special positions. 
    

    Example 3:

    Input: mat = [[0,0,0,1],
                  [1,0,0,0],
                  [0,1,1,0],
                  [0,0,0,0]]
    Output: 2
    

    Example 4:

    Input: mat = [[0,0,0,0,0],
                  [1,0,0,0,0],
                  [0,1,0,0,0],
                  [0,0,1,0,0],
                  [0,0,0,1,1]]
    Output: 3
    

    Constraints:

    • rows == mat.length
    • cols == mat[i].length
    • 1 <= rows, cols <= 100
    • mat[i][j] is 0 or 1.
    class Solution {
        public int numSpecial(int[][] mat) {
            int res = 0;
            int m = mat.length, n = mat[0].length;
            for(int i = 0; i < m; i++) {
                for(int j = 0; j < n; j++) {
                    if(mat[i][j] == 1 && check(i, j, mat)) res++;
                }
            }
            return res;
        }
        public boolean check(int i, int j, int[][] mat) {
            int m = mat.length, n = mat[0].length;
            for(int k = 0; k < m; k++) {
                if(k != i && mat[k][j] == 1) return false;
            }
            for(int k = 0; k < n; k++) {
                if(k != j && mat[i][k] == 1) return false;
            }
            return true;
        }
    }

    或者再用一个数组记录每行列中有几个1,如果只有一个就res++

        public int numSpecial(int[][] mat) {
            int m = mat.length, n = mat[0].length, res = 0, col[] = new int[n], row[] = new int[m];
            for (int i = 0; i < m; i++) 
                for (int j = 0; j < n; j++) 
                    if (mat[i][j] == 1){
                        col[j]++;
                        row[i]++;
                    } 
            for (int i = 0; i < m; i++) 
                for (int j = 0; j < n; j++) 
                    if (mat[i][j] == 1 && row[i] == 1 && col[j] == 1) res++;
            return res;
        }
  • 相关阅读:
    PHP 时间转换Unix 时间戳
    PHP中include()与require()的区别
    PHP substr_replace() 函数
    写了个jQuery无缝滚动小插件
    Orchard代码学习笔记 1. 入口
    也作一下装配脑袋的Expression习题
    [转]IIS7.5中神秘的ApplicationPoolIdentity
    Spring.net AOP异常记入单独日志文件
    [源码学习]Razor在VS调试配置
    [备忘]WPF的Colors类
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13677131.html
Copyright © 2020-2023  润新知